我正在尝试使用R中的get函数来引用并返回数据帧中的列。
以示例数据框为例:
x <- data.frame(id= c("a", "b", "c"), term= c(179, 182, 179), col1= c(1, 2, 3), col2 = c(4, 5, 6))
现在,假设我将2列变量名放入向量中
vars <- c("x$col1", "x$col2")
然后当我调用get vars时,我希望它返回适当的值,例如get(vars [2])最好返回x $ col2。
但是,当我尝试运行get(vars [2])
时,出现以下错误> get(vars[2])
Error in get(vars[2]) : object 'x$col2' not found
但是当我只运行x $ col2时,没有问题,我得到了预期的结果:
> x$col2
[1] 4 5 6
因此很明显,对象x $ col2存在。
我在这里做什么错了?
答案 0 :(得分:4)
这是因为get()
需要一个变量名,而x$col2
不是R中的变量名。x
是一个变量,$
是一个函数,{{1 }}是该函数的参数。基本上就像问col2
一样,这没有意义,因为该值不是变量。因此错误消息是正确的,get("mean(1:3)")
不是对象,但是x$col2
是具有命名元素x
的对象。无需检索变量,而是需要执行存储在字符串中的命令。
您有一些选择。如果要将字符串作为代码执行,则可以
col2
这通常是not recommended,因为这些字符串中可能包含危险的东西。
您可以只存储列名
eval(parse(text="x$col1"))
或者您可以将vars <- c("col1", "col2")
x[[vars[2]]]
用于data.frame,将字符串用于列
get()
但是最好还是退后一步,看看您是如何到达这一点的。这不是以类似R的方式使用R时经常需要做的事情。但是,您并未提供有关实际要完成的工作的背景信息,因此建议替代策略并不容易。