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

时间:2013-05-01 13:58:59

标签: 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
   }

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

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

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

1 个答案:

答案 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]])))    
    })
}