将参数传递给R函数使用的plyr

cro*_*384 4 r

我无法解决一个问题.想写一个这样的函数:

   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
   }
Run Code Online (Sandbox Code Playgroud)

但我找不到传递变量进行处理的方法(.var).有这个错误:

错误eval(expr,envir,enclos):找不到对象'.var'(从其他语言翻译,因此对于英语用户来说可能不是逐字的)

我试过eval,替代但没有解决方案......非常感谢你的帮助.有时我不理解R用于评估的规则.

Jan*_*aan 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]])))    
    })
}
Run Code Online (Sandbox Code Playgroud)