首页 文章

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

提问于
浏览
0

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

不幸的是,我不明白为什么采购整个代码段会产生eval中的错误(expr,envir,enclos):找不到函数"helper" . 当辅助函数独立于函数f运行时,代码有效 . 当我用 by 的未注释调用替换 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 回答

  • 2

    尝试:

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

    here 的帮助页面:

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

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

相关问题