İşte R'de geometrik ortalamayı hesaplamak için vektörleştirilmiş, sıfır ve NA toleranslı bir fonksiyon . Pozitif olmayan değerler içeren durumlar için ayrıntılı meanhesaplama length(x)gereklidir x.
gm_mean = function(x, na.rm=TRUE){
exp(sum(log(x[x > 0]), na.rm=na.rm) / length(x))
}
@ Ben-bolker'a teşekkürler na.rm ve doğru çalıştığından emin olduğu .
Bazı yorumların NAverilerdeki değerlerin yanlış eşdeğerliği ve sıfırlarla ilgili olduğunu düşünüyorum. Aklımdaki uygulamada bunlar aynı, ama elbette bu genel olarak doğru değil. Bu nedenle, isteğe bağlı sıfır yayılımını dahil etmek ve kaldırma length(x)durumunda farklı şekilde davranmak istiyorsanız NA, aşağıdaki işleve biraz daha uzun bir alternatiftir.
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))
}
}
Ayrıca negatif değerleri kontrol NaNettiğini ve geometrik ortalamanın negatif değerler için tanımlanmadığını (ancak sıfırlar için olduğunu) dikkate alarak daha bilgilendirici ve uygun bir döndürdüğünü unutmayın. Bu konuda davamda kalan yorumculara teşekkürler.