1

我知道如何使用 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)))
}

但它不起作用。有任何想法吗??

4

0 回答 0