在另一个函数中定义聚合函数时出现ddply错误

时间:2014-04-22 19:39:55

标签: r plyr

以下几乎最小代码的要点是在函数f中应用ddply,其中ddply的聚合函数(helper)在f的定义中是自定义的。

不幸的是,我不明白为什么采购整个代码片段会产生一个问题 eval中的错误(expr,envir,enclos):找不到函数" helper" 。当辅助函数独立于函数f运行时,代码有效。当我使用 的非注释调用替换 ddply 调用时,代码运行时没有错误。

您能解释错误并提供解决方案或解决方法吗? [用plyr 1.8.1和R 3.0.3测试]

rm (list = ls())
library(plyr)

f <- function() {

  dfx <- data.frame(
    group = c(rep('A', 8), rep('B', 15), rep('C', 6)),
    sex = sample(c("M", "F"), size = 29, replace = TRUE),
    age = runif(n = 29, min = 18, max = 54)
  )

  helper <- function(x) {
    return(max(x))
  }

  result <- ddply(dfx, .(group, sex), summarize, max_age = helper(age))
  #result <- by(dfx$age, dfx[,c("group", "sex")], helper)

  return(result)
}

print(f())

1 个答案:

答案 0 :(得分:2)

尝试:

result <- ddply(dfx, .(group, sex), here(summarize), max_age = helper(age))

来自here的帮助页面:

  

此函数捕获当前上下文,使得更容易使用**进行特殊评估并需要访问调用ddply的环境的函数。

summarize就是这样一个特殊功能。