Zmienne globalne w R.

151

Zaglądam do podręczników, chciałem zapytać społeczność: Jak możemy ustawić zmienne globalne wewnątrz funkcji?

Alphaneo
źródło

Odpowiedzi:

174

Jak assign()pokazuje odpowiedź Christiana , istnieje sposób na przypisanie w globalnym środowisku. Prostszym, krótszym (ale nie lepszym ... trzymaj się przypisania) sposobem jest użycie <<-operatora, tj

    a <<- "new" 

wewnątrz funkcji.

Dirk Eddelbuettel
źródło
41
To podejście faktycznie nie zapisuje w środowisku globalnym, ale zamiast tego w zakresie nadrzędnym. Czasami zakres nadrzędny będzie taki sam jak środowisko globalne, chociaż w niektórych przypadkach w przypadku wielu funkcji zagnieżdżonych tak nie jest.
LunaticSoul
5
Dlaczego jest to assignpreferowane <<-?
Jasha
4
@Jasha <<-przeszuka łańcuch załączników do środowiska globalnego i przypisze do pierwszej pasującej zmiennej, którą znajdzie. Hipotetycznie, jeśli masz funkcję f()zagnieżdżoną w zamknięciu g()i aistnieje w nim g(), to użycie a <<-in f()spowoduje przypisanie do ain g(), a nie do środowiska globalnego. Jednak często tego właśnie chcesz.
Bob
93

Znalazłem rozwiązanie, jak ustawić zmienną globalną w postach na liście mailingowej za pomocą przypisania :

a <- "old"
test <- function () {
   assign("a", "new", envir = .GlobalEnv)
}
test()
a  # display the new value
chrześcijanin
źródło
1
zobacz także zaakceptowaną odpowiedź tego postu: stackoverflow.com/questions/3969852/ ... do aktualizacji ramek danych w funkcji
user1420372