2016-05-30 68 views
0

我想動態創建列表中的元素,其中列表中的每個元素實際上是一個值列表。爲了隔離問題,在此使用i=3,但i確實可以是任何整數或任何字符/字符串。如何使用R中的「eval」指定列表中的變量名稱?

i=3 
varname = paste("x", as.character(i), sep="") 
X=list() 
var = rnorm(10, 100, 5) 
new_list=list(eval(varname)=var) 

上面給出了錯誤回溯:

3: var = rnorm(10, 100, 5) 
4: new_list=list(eval(varname)= 

但現在檢查了這一點:

# but "eval(varname)" is a character 
print(eval(varname)) 

[1] 「X3」

# and this works: 
new_list=list("x3"=var) 

...那麼,爲什麼行new_list=list(eval(varname)=var)沒有工作?

回答

0

更容易與setNames

new_list <- setNames(list(var), varname) 
+0

這個工程命名的元素。但爲什麼不是我嘗試這項工作的方式?請幫助我更深入地瞭解R的細微差別。 – Hunle

+0

你的代碼不工作的原因是因爲'eval(varname)'不會被評估。它位於呼叫中等號的左側。這是一個特殊的位置,需要一個直接的名字。使用akrun的建議。 –

相關問題