Non esiste un modo per modificare in modo permanente il modo in cui le variabili vengono risolte poiché ciò interromperà molte funzioni. Il comportamento che non ti piace è in realtà molto utile in molti casi.
Se una variabile non viene trovata in una funzione, R verificherà l'ambiente in cui è stata definita la funzione per tale variabile. È possibile modificare questo ambiente con la funzione environment()
. Ad esempio
environment(sum) <- baseenv()
sum(4,5)
# Error in sum(4, 5) : object 'sUm' not found
Questo funziona perchè baseenv()
punti all'ambiente "base" che è vuoto. Tuttavia, si noti che non si ha accesso ad altre funzioni con questo metodo
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"
perché in un linguaggio funzionale come R, le funzioni sono solo le variabili regolari che sono anche come ambito nell'ambiente in cui vengono definiti e non sarebbe disponibile nell'ambiente di base.
Dovresti modificare manualmente l'ambiente per ogni funzione che scrivi. Anche in questo caso, non è possibile modificare questo comportamento predefinito poiché molte delle funzioni e delle funzioni R di base definite nei pacchetti si basano su questo comportamento.
Vedere: [questa domanda] (http://stackoverflow.com/questions/25373447/how-to-detect-free-variable-names-in-r-functions) o [questa domanda] (http: // stackoverflow.com/questions/21245850/making-sure-a-function-does-not-use-a-global-variable) o [questa domanda] (http://stackoverflow.com/questions/6216968/r-force- ambito locale) per ulteriori discussioni. – MrFlick