Không có cách nào thay đổi vĩnh viễn cách các biến được giải quyết vì điều đó sẽ phá vỡ rất nhiều hàm. Hành vi bạn không thích thực sự rất hữu ích trong nhiều trường hợp.
Nếu biến không được tìm thấy trong hàm, R sẽ kiểm tra môi trường nơi hàm được xác định cho biến đó. Bạn có thể thay đổi môi trường này bằng chức năng environment()
. Ví dụ:
environment(sum) <- baseenv()
sum(4,5)
# Error in sum(4, 5) : object 'sUm' not found
Điều này hoạt động vì baseenv()
trỏ đến môi trường "cơ sở" trống. Tuy nhiên, lưu ý rằng bạn không có quyền truy cập vào các chức năng khác với phương pháp này
myfun<-function(x,y) {x+y}
sum <- function(x,y){sum = myfun(x+y); return(sUm)}
environment(sum)<-baseenv()
sum(4,5)
# Error in sum(4, 5) : could not find function "myfun"
bởi vì trong một ngôn ngữ chức năng như R, chức năng chỉ là các biến thông thường cũng được scoped trong môi trường, trong đó họ được định nghĩa và sẽ không có sẵn trong môi trường cơ sở.
Bạn sẽ phải thay đổi môi trường theo cách thủ công cho từng chức năng bạn viết. Một lần nữa, không có cách nào để thay đổi hành vi mặc định này vì nhiều hàm R và hàm cơ sở được định nghĩa trong các gói dựa trên hành vi này.
Xem: [câu hỏi này] (http://stackoverflow.com/questions/25373447/how-to-detect-free-variable-names-in-r-functions) hoặc [câu hỏi này] (http: // stackoverflow.com/questions/21245850/making-sure-a-function-does-not-use-a-global-variable) hoặc [câu hỏi này] (http://stackoverflow.com/questions/6216968/r-force- phạm vi địa phương) để thảo luận thêm. – MrFlick