我知道如何使用 ddply 使用按字符串排序的列名并通过 get 汇总外部函数,详见ddply + summarize function column name input。这在从提示交互工作时有效。
但是,当我尝试在函数中执行此操作时,这不起作用。我也知道还有其他方法可以解决这个问题,详见如何使用变量名来使用 ddply 引用数据框列?. 我只能避免总结。但问题是我想了解它是如何工作的(我目前正在重读 Hadley 的优秀书籍,它刚刚移至http://adv-r.had.co.nz/)
由于这类似于 data.table 发生的情况,因此我提供了一个比较
require(data.table)
require(plyr)
dt = data.table(Alpha = 1:3, Beta = head(LETTERS,n=3))
testDt <- function(dt,colName) {
dt[,mean(get(colName))]
}
testPlyr <- function(dt,colName) {
ddply(.data=dt,.variables=NULL,.fun=summarise,mean(get(colName)))
}
testDt 完美运行
testDt(dt,"Alpha")
但是当你这样做时 testPlyr 失败了
testPlyr(dt,"Alpha")
当然 data.table 和 plyr 以不同的方式处理调用中的表达式。
我也试过
testPlyr <- function(dt,colName) {
e = environment()
ddply(.data=dt,.variables=NULL,.fun=summarise,mean(get(colName,envir=e)))
}
但它不起作用。有任何想法吗??