R中的获取功能未返回存在的对象

时间:2019-06-06 19:14:34

标签: r

我正在尝试使用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存在。

我在这里做什么错了?

1 个答案:

答案 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时经常需要做的事情。但是,您并未提供有关实际要完成的工作的背景信息,因此建议替代策略并不容易。