微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个函数来计算变量的加权平均值,并使用data.table聚合语法按时间段对其进行分组.但是,我想以编程方式提供加权列的名称.有没有办法在仍然使用传统的data.table语法的同时实现这一目标?下面的函数wtmean1演示了我想做什么的想法(但它会产生错误).函数wtmean2的工作原理受到data.table FAQ的启发,但传递整个表达式更加麻烦,并且不可能在函数提取加权列的名称,这可能是必需的.有没有办法让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,wt2))

解决方法

你可以使用get:

wtmean1 <- function(dt1,get(weight)),by=timeperiod]
}

使用您的示例数据:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐