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

Error using eval() to name data.table column in r

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

为此,我想我会使用 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]

但是这个returns

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

这对我来说很奇怪,因为

> eval(sumtitle)
[1] "Sum"

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

按预期工作。

如有任何帮助,我们将不胜感激。

问题不在于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