আর-তে জ্যামিতিক গড় গণনা করার জন্য এখানে একটি ভেক্টরাইজড, শূন্য- এবং এনএ-সহনশীল কাজ রয়েছে the যেসব ক্ষেত্রে অ-ধনাত্মক মান রয়েছে সেগুলির জন্য mean
জড়িত ভার্বোজ গণনা length(x)
প্রয়োজনীয় isx
gm_mean = function(x, na.rm=TRUE){
exp(sum(log(x[x > 0]), na.rm=na.rm) / length(x))
}
na.rm
এটি সঠিকভাবে কাজ করে তা নিশ্চিত করার জন্য @ বেন-বলকারকে পাস -থ্রো এবং @ গ্রেগরকে লক্ষ করার জন্য ধন্যবাদ Thanks
আমি মনে করি কিছু মন্তব্য NA
তথ্য এবং শূন্যের মানগুলির একটি মিথ্যা-সমতার সাথে সম্পর্কিত । অ্যাপ্লিকেশনটিতে আমার মনে ছিল সেগুলি একই, তবে অবশ্যই এটি সাধারণত সত্য নয়। সুতরাং, আপনি যদি জিরোগুলির alচ্ছিক প্রচারগুলি অন্তর্ভুক্ত করতে চান এবং অপসারণের 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
সম্মানের সাথে প্রত্যাবর্তন করে যে জ্যামিতিক গড়টি নেতিবাচক মানগুলির জন্য সংজ্ঞায়িত নয় (তবে জিরোদের জন্য)। মন্তব্যকারীরা যারা এই বিষয়ে আমার মামলায় স্থির থাকে তাদের ধন্যবাদ জানাই।