Невозможно постоянно изменять, как изменяются переменные, потому что это нарушит множество функций. Поведение, которое вам не нравится, на самом деле очень полезно во многих случаях.
Если переменная не найдена в функции, R проверяет среду, в которой функция была определена для такой переменной. Вы можете изменить эту среду с помощью функции environment()
. Например
environment(sum) <- baseenv()
sum(4,5)
# Error in sum(4, 5) : object 'sUm' not found
Это работает, потому что baseenv()
указывает на «базовую» среду, которая пуста. Однако обратите внимание, что у вас нет доступа к другим функциям с помощью этого метода
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"
, поскольку в функциональном языке, таком как R, функции являются просто регулярными переменными, которые также ограничены средой, в которой они определены и не будут доступны в базовой среде.
Вы должны вручную изменить среду для каждой функции, которую вы пишете. Опять же, нет способа изменить это поведение по умолчанию, потому что многие из базовых функций и функций R, определенных в пакетах, полагаются на это поведение.