首页 文章

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

提问于
浏览
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) . 有这个错误:

Error eval(expr, envir, enclos) : object '.var' was not found (翻译自其他语言,因此对于英语用户来说可能不是逐字的)

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

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

相关问题