Ich habe eine Funktion, die eine Umgebung darin erstellt, und ich möchte diese Umgebung der globalen Umgebung zuweisen. Derzeit kann ich das durch die Umwelt zu globalenv()
als letzten Schritt der Zuordnung - wie folgt:Effiziente Verschiebung der Umgebung von der Funktion in die globale Umgebung
funfun <- function(inc = 1){
dataEnv <- new.env()
dataEnv$d1 <- 1 + inc
dataEnv$d2 <- 2 + inc
dataEnv$d3 <- 2 + inc
assign('dataEnv', dataEnv, envir = globalenv())
}
Es fühlt sich an wie ich in der Lage sein soll, etwas zu tun dataEnv
persisit zu machen, wenn die Funktion funfun
Ende (Kopieren speichern die Umgebung am Ende) aber meine Versuche, wie dataEnv <- new.env(parent = globalenv())
, haben nicht funktioniert.
Warum schlägt es fehl? Ist das möglich?
Auch, was ist der effizienteste Weg, dies zu tun?
Meine Tabellen sind manchmal sehr groß, und das Kopieren wird ein Problem, wenn das Projekt wächst.
Ist die Rücksendung erforderlich? Oder ist es genug, nur DataEnv als letzte Zeile der Funktion zu haben? Ich bin ewig unsicher über Rückmeldungen in r. – ricardo
Rückkehr ist nicht erforderlich, Sie können nur den Wert am Ende setzen. Wenn Sie Zweifel am Stil haben, habe ich kürzlich diese http://google-styleguide.googlecode.com/svn/trunk/Rguide.xml gelesen. Ich denke, dass sie in einigen Beispielen 'return' verwenden. Aber ist nur eine Frage des Geschmacks. – Usobi
Dies scheint eine "Garbage Collection" -Frage aufzuwerfen. Angenommen, Sie geben die Umgebungsreferenz nicht zurück? Wie erkennen Sie die Existenz von 'dataEnv', wenn Sie also nichts anderes löschen können, wenn Sie nicht wollen? –