「R」如何计算几何平均数

2020-07-03 12:24:22 浏览数 (4)

刚遇到一个有意思的问题,如何用R计算几何平均数。如果数字少,简单,计算很容易,直观上,先用prod函数连乘,然后开方即可。

但我的数值大,连乘几十个之后R结果就是INF了,然后开方就还是INF,算不出来!

聪明人就会动脑筋了,转个弯,先取对数,再指数化!Stackoverflow上的解答让我大开眼界,下面给一个通用的计算函数:

代码语言:javascript复制
gm_mean = function(x, na.rm=TRUE, zero.propagate = FALSE){
    if(any(x < 0, na.rm = TRUE)){
        return(NaN)
    }
    if(zero.propagate){
        if(any(x == 0, na.rm = TRUE)){
            return(0)
        }
        exp(mean(log(x), na.rm = na.rm))
    } else {
        exp(sum(log(x[x > 0]), na.rm=na.rm) / length(x))
    }
}

最后一个参数指定是否容忍0的存在。

1 人点赞