2016-12-16 20 views
1

Gibt es eine Möglichkeit, alle Variablen innerhalb einer lokalen Umgebung auf globale Umgebung zu setzen? Ich weiß, wie man das für einzelne Variable macht. Was ist, wenn ich 30+ Variablen habe? Kann ich den gesamten lokalen Arbeitsbereich in global senden? Vielen Dank.R alle Variablen auf globale Umgebung setzen

myfunction=function(){ 
    assign("a", 10, envir = .GlobalEnv) 
} 
myfunction() 
print (a) 

oder im Falle einer RNW-Datei. Ich kann tun,

a=3 
environment(a)=.GlobalEnv 
+0

Entschuldigung. Es war ein Tippfehler. Ich habe gerade die Funktion in Zeile 3 aufgerufen und sie nicht neu definiert. – DrunkenMunky

Antwort

0

Als Funktion ruft allglobal() die Objekte (Variablen und Funktionen) in der aufgerufenen Umgebung ab (parent.frame) und weist sie der globalen Umgebung zu. Die zweite Funktion ist ein Test. Nach dem Ausführen existieren "test1" und "test2" in der globalen Umgebung:

allglobal <- function() { 
    lss <- ls(envir = parent.frame()) 
    for (i in lss) { 
     assign(i, get(i, envir = parent.frame()), envir = .GlobalEnv) 
    } 
} 

testallglob <- function() { 
    test1 <- 1 
    test2 <- function() 2 
    allglobal() 
} 
+0

Sie können 'list2env' und' mget' verwenden, um'allglobal' prägnanter zu machen: 'allglobal <- function() list2env (mget (ls (name = parent.frame()), envir = parent.frame()), envir = .GlobalEnv) ' –

+0

Wird das überprüfen, scheint die Schleife loszuwerden, wenn OK. –

+0

Es hat funktioniert! Danke, Mann! @WeihuangWong – DrunkenMunky

0

Eine kleine Änderung Ihrer Methode funktioniert:

vars <- ls(all = TRUE) 
for (i in 1:length(vars)){ 
assign(vars[i], get(vars[i]), envir = .GlobalEnv) 
} 

Dies ist ein verwendet für Schleife programmatisch den Namen der einzelnen Variablen in der lokalen Umgebung den Zugriff auf und ordnet dann jede Variable auf die gleicher Name in .GlobalEnv.