İş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ı mean
hesaplama 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 NA
verilerdeki 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 NaN
ettiğ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.