在R中,如何使用值作为变量名

时间:2014-02-07 16:29:37

标签: r get

我知道函数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

在这种情况下,如何检索变量名称?

2 个答案:

答案 0 :(得分:2)

get不能像你需要分别指定变量和环境(列表被强制为一个)那样工作:

get("length",obj1)
[1] 1 2 3 4

使用您拥有的数据执行此操作,您需要使用evalparse

eval(parse(text=A[1]))
[1] 1 2 3 4

但是,我建议您重新考虑解决问题的方法,因为getevalparse是一些迟钝的工具,可以在以后咬你。

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