将多个参数传递给 apply/sapply 语法

Passing in multiple arguements to apply/sapply sytnax

这里是新手 - 无法弄清楚一些基本语法并且考虑到单词的通用性 google 没有帮助....

mtcars$testcol = 'testing'
imgood = sapply(mtcars, IQR, na.rm=T) #works ok... helpme =
sapply(mtcars, quantile c(.3,.9, .95, na.rm=TRUE)  #don't know how to

那么我想做的就是

mtcars$mynewcolumn = imgood....etc

传入参数 sapply/apply...

我也一直在看 summarise_each, summarise_all 和 dplyr:: 有什么方法可以在这里工作吗?

不幸的是,quantile 并非设计用于 return NA 向量或单个 NA。为了实现这一点,您可以编写一个封闭函数来按照您希望的方式运行:

my_quantile <- function(x, ...) if ( is.numeric(x) ) {quantile(x,...)} else {
                                                 z <- list(...)[[1]]; rep(NA,length(z))}

> sapply(mtcars, my_quantile, c(.3,.9, .95), na.rm=TRUE)
      mpg cyl   disp     hp   drat      wt    qsec vs am gear carb testcol
30% 15.98   4 142.06 106.20 3.1500 2.77300 17.0200  0  0    3  2.0      NA
90% 30.09   8 396.00 243.50 4.2090 4.04750 19.9900  1  1    5  4.0      NA
95% 31.30   8 449.00 253.55 4.3145 5.29275 20.1045  1  1    5  4.9      NA

这可能不是您要编写的第一个函数,因为它需要提取传递给分位数的第二个参数以重复 NA 的次数以匹配其他分位数,这反过来允许 sapply 重新运行矩阵而不是列表。它也会有点脆弱,因为你没有说出你的论点。如果 probs 被命名,那么它可能不是第一个,所以最好检查一下 match.args 是否可以找到 probs 参数,然后,如果失败了,使用 ...-参数列表中的第一个参数。