Globale Variablen in R.

151

Ich stöbere in den Handbüchern und wollte die Community fragen: Wie können wir globale Variablen innerhalb einer Funktion festlegen?

Alphaneo
quelle

Antworten:

173

Wie Christians Antwort mit assign()zeigt, gibt es eine Möglichkeit, sich im globalen Umfeld zuzuordnen. Eine einfachere, kürzere (aber nicht bessere ... bleiben Sie bei der Zuweisung) Methode ist die Verwendung des <<-Operators, dh

    a <<- "new" 

innerhalb der Funktion.

Dirk Eddelbuettel
quelle
41
Dieser Ansatz wird tatsächlich nicht in einer globalen Umgebung gespeichert, sondern im übergeordneten Bereich. Manchmal ist der übergeordnete Bereich mit der globalen Umgebung identisch, in einigen Fällen mit vielen verschachtelten Funktionen jedoch nicht.
LunaticSoul
5
Warum wird assignbevorzugt <<-?
Jasha
4
@Jasha <<-durchsucht die Gehäusekette bis zur globalen Umgebung und weist der ersten gefundenen übereinstimmenden Variablen zu. Hypothetisch, wenn Sie eine Funktion f()in einem Verschluss verschachtelt g()und aexistiert in g(), dann unter Verwendung von a <<-in f()wird zuweisen ain g(), nicht auf die globale Umwelt. Oft ist dies jedoch das, was Sie wollen.
Bob
93

Ich fand eine Lösung dafür , wie eine globale Variable in einer einstellen Mailingliste Buchung über assign :

a <- "old"
test <- function () {
   assign("a", "new", envir = .GlobalEnv)
}
test()
a  # display the new value
Christian
quelle
1
Siehe auch die akzeptierte Antwort dieses Beitrags: stackoverflow.com/questions/3969852/… zum Aktualisieren von Datenrahmen innerhalb einer Funktion
user1420372