Nie ma sposobu, aby trwale zmienić sposób rozwiązywania zmiennych, ponieważ spowodowałoby to złamanie wielu funkcji. Zachowanie, którego nie lubisz, jest bardzo przydatne w wielu przypadkach.
Jeśli zmienna nie zostanie znaleziona w funkcji, R sprawdzi środowisko, w którym funkcja została zdefiniowana dla takiej zmiennej. Możesz zmienić to środowisko za pomocą funkcji environment()
. Na przykład
environment(sum) <- baseenv()
sum(4,5)
# Error in sum(4, 5) : object 'sUm' not found
To działa, ponieważ baseenv()
punktów do „bazowego” środowiska, który jest pusty. Należy jednak pamiętać, że nie ma dostępu do innych funkcji przy użyciu tej metody
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"
ponieważ w języku funkcjonalne, takie jak R, funkcje są tylko zwykłe zmienne, które są również lunetą w środowisku, w którym są zdefiniowane i nie byłby dostępny w środowisku podstawowym.
Użytkownik ręcznie musiałby zmienić środowisko dla każdej zapisywanej funkcji. Ponownie, nie ma możliwości zmiany tego domyślnego zachowania, ponieważ wiele podstawowych funkcji i funkcji R zdefiniowanych w pakietach polega na tym zachowaniu.
Zobacz: [to pytanie] (http://stackoverflow.com/questions/25373447/how-to-detect-free-variable-names-in-r-functions) lub [to pytanie] (http: // stackoverflow.com/questions/21245850/making-sure-a-function-does-not-use-a-global-variable) lub [to pytanie] (http://stackoverflow.com/questions/6216968/r-force- local-scope) do dalszej dyskusji. – MrFlick