我试图回答有关为data.table对象创建非标准评估函数并进行分组求和的一个很好的问题。Akrun提出了一个可爱的答案,在此我将对其进行简化:
akrun <- function(data, var, group){
var <- substitute(var)
group <- substitute(group)
data[, sum(eval(var)), by = group]
}
library(data.table)
mt = as.data.table(mtcars)
akrun(mt, cyl, mpg)
# group V1
# 1: 6 138.2
# 2: 4 293.3
# 3: 8 211.4
Run Code Online (Sandbox Code Playgroud)
我也在研究一个答案,并且得到了几乎相同的答案,但是substitutes与其他答案保持一致。我的导致错误:
gregor = function(data, var, group) {
data[, sum(eval(substitute(var))), by = substitute(group)]
}
gregor(mt, mpg, cyl)
# Error in `[.data.table`(data, , sum(eval(substitute(var))), by = substitute(group)) :
# 'by' or 'keyby' must evaluate to vector or list …Run Code Online (Sandbox Code Playgroud)