我的目标是根据另一个变量的值命名数据表的新列。通常,这很简单,但是对于数据表,任何列名输入都被视为字符串,而不是变量(我认为?)
为此,我想我会使用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]
按预期工作。
非常感谢任何帮助。
答案 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