【发布时间】:2019-01-30 13:48:08
【问题描述】:
使用列创建新变量时,data.table 不允许引用列名。 在函数中使用 data.table 时会产生以下问题。
library(data.table)
dt <- data.table(var1 = c(1:10), var2 = seq(2,20,2), var3 = seq(40,4,-4))
addColumnsError <- function(dt, v1, v2){
dt[,v1 + v2]
}
addColumnsError(dt, var1, var2)
> Error in eval(jsub, SDenv, parent.frame()) : object 'var1' not found
addColumnsError(dt, "var1", "var2")
> Error in v1 + v2 : non-numeric argument to binary operator
以下解决方法可以解决此问题。
addColumns <- function(dt,v1,v2){
v1<-as.character(substitute(v1))
v2<-as.character(substitute(v2))
dt[,eval(parse(text=v1)) + eval(parse(text=v2))]
}
addColumns(dt, var1, var2)
[1] 3 6 9 12 15 18 21 24 27 30
addColumns(dt, "var1", "var2")
[1] 3 6 9 12 15 18 21 24 27 30
有没有更优雅的方式将列名传递给函数内的 data.table 对象?
(注意:我可以只调用 data.table 函数,但我打算进行更复杂的计算:))
【问题讨论】:
标签: r data.table