2016-05-30 76 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的建议。 –

相关问题