यहाँ R में ज्यामितीय माध्य की गणना के लिए एक वेक्टर, शून्य- और NA- सहिष्णु फ़ंक्शन है। इसमें mean
शामिल क्रियाओं की गणना length(x)
उन मामलों के लिए आवश्यक है, जहाँ x
गैर-सकारात्मक मान हैं।
gm_mean = function(x, na.rm=TRUE){
exp(sum(log(x[x > 0]), na.rm=na.rm) / length(x))
}
na.rm
पास-थ्रू नोटिंग के लिए @ बेन-बोल्कर और @Gregor को धन्यवाद कि यह सही ढंग से काम करता है।
मुझे लगता है कि कुछ टिप्पणियां NA
डेटा और शून्य में मूल्यों के झूठ-तुल्यता से संबंधित हैं । आवेदन में मुझे ध्यान में था कि वे समान हैं, लेकिन निश्चित रूप से यह आम तौर पर सच नहीं है। इस प्रकार, यदि आप शून्य के वैकल्पिक प्रसार को शामिल करना चाहते हैं, और हटाने length(x)
के मामले में अलग तरीके से व्यवहार करते हैं NA
, तो निम्नलिखित फ़ंक्शन के लिए थोड़ा लंबा विकल्प है।
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))
}
}
ध्यान दें कि यह किसी भी नकारात्मक मूल्यों की जांच करता है, और अधिक जानकारीपूर्ण और उचित NaN
सम्मान देता है कि ज्यामितीय माध्य नकारात्मक मानों के लिए परिभाषित नहीं है (लेकिन शून्य के लिए है)। टिप्पणीकारों के लिए धन्यवाद जो इस बारे में मेरे मामले पर रुके थे।