我知道如何使用ddply在字符串中排序的列名,并通过get汇总外部函数,详见ddply + summarise function column name input。这在从提示符交互式工作时有效。
但是,当我尝试在函数内部执行此操作时,这不起作用。 我也知道还有其他方法可以解决这个问题,详见How can I use variable names to refer to data frame columns with 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)))
}
但它不起作用。任何想法??