2016-08-01 60 views
0

我正在嘗試編寫一個函數來對圖4數據幀進行相互映射,並且我已經縮小了一直存在的一行代碼R由於某種原因沒有運行。R只是沒有在一個函數中運行一行代碼

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)))) 
} 
} 

當我運行創建colnames1,colnames2,colnames3,和colnames4,oustide的功能,它的工作原理,但如果我運行使用它的功能,而d線(1:4)的所有創建的作爲各種dtaframes,colnames1:4根本不會被創建。有人知道這裏發生了什麼嗎?

+3

不要使用'assign'。當你調用該函數時,讓你的函數返回結果並賦值。 – Roland

回答

1

如果您想在函數中使用assign變量,則必須專門在assign函數中指定全局環境。嘗試運行通過this article,並檢查下面的代碼。

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 
相關問題