我知道函数get
可以帮助您将值转换为变量名,例如get(test[1])
。但是当值是列表格式时,我发现它不兼容。请看下面的例子:
> A = c("obj1$length","obj1$width","obj1$height","obj1$weight")
> obj1 <- NULL
> obj1$length=c(1:4);obj1$width=c(5:8);obj1$height=c(9:12);obj1$weight=c(13:16)
> get(A[1])
Error in get(A[1]) : object 'obj1$length' not found
在这种情况下,如何检索变量名称?
答案 0 :(得分:2)
get
不能像你需要分别指定变量和环境(列表被强制为一个)那样工作:
get("length",obj1)
[1] 1 2 3 4
使用您拥有的数据执行此操作,您需要使用eval
和parse
:
eval(parse(text=A[1]))
[1] 1 2 3 4
但是,我建议您重新考虑解决问题的方法,因为get
,eval
和parse
是一些迟钝的工具,可以在以后咬你。
答案 1 :(得分:0)
我认为eval()
函数可以完成其他用途。
的eval(A [1])
&gt; [1] 1 2 3 4
你也可以找到我实现的这个简单函数(基于常用的组合eval,parse,paste):
评估&lt; -function(...,envir = .GlobalEnv){eval(parse(text = paste(...,sep =“”)),envir = envir)}
它连接和评估几个字符类型对象。如果您希望在其他函数中使用它,请在函数的开头添加
envir&lt; - environment()
并像这样使用它:
评估([某些角色对象],envir = envir)
尝试,例如
myvariable1&LT; - “AAA”; myvariable2&LT; - “BBB”; AAA-LT; -15; BBB&LT; -3
评估(myvariable1,“*”,myvariable2)。
当我必须用几个变量评估相似的句子,或者当我想用自动生成的名称创建变量时,我发现它非常有用。
for(i in 1:100){evaluate(“variable”,i,“&lt; -2 *”,i)}