我希望能够对按不同属性分组的data.table进行大量批量处理。
我有一个函数允许通过为要分组的列传递一个字符串来完成此操作:
library(data.table)
myaggfunction<-function(mydt,aggcol,type){
mydt[,lapply(.SD, sum), by=aggcol][,Type:=type]
}
myaggfunction(as.data.table(iris),"Species","Test")[]
但是,某些列需要在输出中使用别名。我知道我可以将一个字符串传递给by
,但是如何传递一个在函数参数级别没有得到评估的等价列表,例如。
myaggfunction(as.data.table(iris),list(IrisSpecies=Species),"Test")[]
答案 0 :(得分:2)
您可以使用substitute
获取未评估的表达式,并将其传递给by
中的data.table
。
library(data.table)
myaggfunction<-function(mydt,aggcol,type){
aggcol <- substitute(aggcol)
mydt[,lapply(.SD, sum), by=aggcol][,Type:=type]
}
myaggfunction(as.data.table(iris),"Species","Test")[]
myaggfunction(as.data.table(iris),list(IrisSpecies=Species),"Test")[]