将别名列传递给函数,以便在data.table`by =`参数中使用

时间:2015-03-02 11:12:42

标签: r data.table

我希望能够对按不同属性分组的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")[]

1 个答案:

答案 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")[]