使用 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
我的目标是根据另一个变量的值命名数据的新列 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