将参数传递给data.table聚合函数

时间:2013-11-25 15:37:00

标签: r data.table

我有一个函数可以计算变量的加权平均值,并使用data.table聚合语法按时间段对其进行分组。但是,我想以编程方式提供加权列的名称。有没有办法在仍然使用传统的data.table语法时完成此操作?下面的函数wtmean1演示了我想做什么的想法(但它会产生错误)。函数wtmean2的工作原理受data.table常见问题解答的启发,但传递整个表达式更麻烦,并且不可能在函数中提取加权列的名称,这可能是被需要。有没有办法让wtmean1工作,我传入的唯一参数是字符串中加权列的名称?

wtmean1 <- function(dt1, weight) {
  dt1[,weighted.mean(x, weight), by=timeperiod]
}

wtmean2 <- function(dt1, expr) {
  dt1[,eval(substitute(expr)), by=timeperiod]
}

mydata <- data.table(x=1:10, timeperiod=rep(1:2,5), wt1=rnorm(10), wt2=rnorm(10))
wtmean1(mydata, "wt1") # ERROR
wtmean2(mydata, weighted.mean(x, wt2))

1 个答案:

答案 0 :(得分:7)

您可以使用get

wtmean1 <- function(dt1, weight) {
  dt1[,weighted.mean(x, get(weight)), by=timeperiod]
}

使用您的样本数据:

> set.seed(1)
> mydata <- data.table(x=1:10, timeperiod=rep(1:2,5), wt1=rnorm(10), wt2=rnorm(10))
> wtmean1(mydata, "wt1")
   timeperiod          V1
1:          1 -102.476925
2:          2    3.362326
相关问题