2016-08-01 5 views
0

Ich versuche, eine Funktion zum Graphen 4 Datenrahmen gegeneinander zu schreiben, und ich habe die Gesamtheit der Probleme eingegrenzt, die ich bis zu einer Zeile Code, der R hatte läuft aus irgendeinem Grund nicht.R einfach nicht eine Codezeile in einer Funktion

Compare=function(a,b,c,d){ 
d1=a 
d2=b 
d3=c 
d4=d 

for(n in 1:4){ 
    assign(paste0("colnames",n),colnames(get(paste0("d",n)))) 
} 
} 

Wenn ich laufen die Zeile, die colnames1, colnames2, colnames3 und colnames4, oustide der Funktion erstellt, es funktioniert, aber wenn ich es mit der Funktion ausführen, während d (1: 4) alle geschaffen als die verschiedenen dtaframes wird der colnames1: 4 einfach nicht erstellt. Weiß jemand, was hier vor sich geht?

+3

Verwenden Sie nicht 'assign'. Lassen Sie Ihre Funktion das Ergebnis zurückgeben und zuweisen, wenn Sie die Funktion aufrufen. – Roland

Antwort

1

Sie müssen die globale Umgebung ausschließlich in der Funktion assign angeben, wenn Sie eine Variable in einer Funktion assign möchten. Versuchen Sie, durch this article zu laufen, und überprüfen Sie den folgenden Code.

assignTest1 = function(){ 
    assign("val1", 1) 
} 
assignTest1() 
print(val1) # Error in print(val1) : object 'val1' not found 

# ---------- 

assignTest2 = function(){ 
    assign("val2", 2, globalenv()) 
} 
assignTest2() 
print(val2) # [1] 2 

# ---------- 

assignTest3 = function(){ 
    val3 <- 3 
} 
assignTest3() 
print(val3) # Error in print(val3) : object 'val3' not found 

# ---------- 

assignTest4 = function(){ 
    val4 <<- 3 
} 
assignTest4() 
print(val4) # [1] 3 
Verwandte Themen