我无法解决一个问题。想写一个这样的函数:
f.describe <- function(.data, .var, .by)
{
require(plyr)
res <- ddply(.data, .by,
summarize,
N = sum(!is.na(.var))
`Mean (SD)`=sprintf("%5.2f (%5.2f)",
mean(.var, na.rm=TRUE), sd=sd(.var, na.rm=TRUE)),
Median = sprintf("%5.2f", median(.var))
)
res
}
但我找不到传递变量进行处理的方法(.var)。有这个错误:
错误eval(expr,envir,enclos):找不到对象'.var'(从其他语言翻译,因此对于英语用户来说可能不是逐字的 )
我尝试了eval,替代但没有解决方案......非常感谢您的帮助。有时我不理解 R 用于评估的规则。
答案 0 :(得分:5)
在这种情况下,将函数传递给ddply
而不是使用summarize
可能更容易:
f.describe <- function(.data, .var, .by) {
require(plyr)
ddply(.data, .by, function(d) {
c(N = sum(!is.na(d[[.var]])),
`Mean (SD)`=sprintf("%5.2f (%5.2f)",
mean(d[[.var]], na.rm=TRUE),
sd=sd(d[[.var]], na.rm=TRUE)),
Median = sprintf("%5.2f", median(d[[.var]])))
})
}