以下几乎最小代码的要点是在函数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())
答案 0 :(得分:2)
尝试:
result <- ddply(dfx, .(group, sex), here(summarize), max_age = helper(age))
来自here
的帮助页面:
此函数捕获当前上下文,使得更容易使用**进行特殊评估并需要访问调用ddply的环境的函数。
summarize
就是这样一个特殊功能。