Cook R数据-R语言-图表-决策-Linux-Python生物信息学与算法

【r<-方案】如何计算几何平均数

2018-07-05  本文已影响20人  王诗翔

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

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

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

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的存在。

https://stackoverflow.com/questions/2602583/geometric-mean-is-there-a-built-in

上一篇下一篇

猜你喜欢

热点阅读