使用eval()命名r中的data.table列时出错

时间:2015-03-25 21:20:17

标签: r data.table

我的目标是根据另一个变量的值命名数据表的新列。通常,这很简单,但是对于数据表,任何列名输入都被视为字符串,而不是变量(我认为?)

为此,我想我会使用eval函数。我的代码:

library(data.table)

DT <- data.table(x = c(1,1,2,2,3), y = 6:10, z = 11:15)

sumtitle <- "Sum"

Output <- DT[ , j = list(eval(sumtitle) = sum(y)), by = x]

但是会返回

Error: unexpected '=' in "Output <- DT[ , j = list(eval(sumtitle) ="

这对我来说很奇怪,因为

> eval(sumtitle)
[1] "Sum"

Output <- DT[ , j = list("Sum" = sum(y)), by = x]

按预期工作。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:8)

问题不在于data.table。您正在尝试将参数名称指定为表达式,这不是直接合法的:

sumtitle <- "Sum"
y <- 1:10
list(eval(sumtitle) = sum(y))
# Error: unexpected '=' in "list(eval(sumtitle) ="

产生相同的错误。请尝试改为:

DT[ , j = setNames(list(sum(y)), sumtitle), by = x]

   x Sum
1: 1  13
2: 2  17
3: 3  10