4

我一个问题都解决不了。想写一个这样的函数:

   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) : object '.var' was not found翻译自其他语言,因此对于英语用户来说可能不是逐字记录

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

4

1 回答 1

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]])))    
    })
}
于 2013-05-01T15:15:10.600 回答