मैं इन सभी विकल्पों को देख रहा था और उनकी सापेक्ष विशेषताओं और प्रदर्शन के बारे में आश्चर्य करने लगा, इसलिए मैंने कुछ परीक्षण किए। यदि किसी और के बारे में उत्सुक हैं, तो मैं यहां अपना परिणाम साझा कर रहा हूं।
यहां पोस्ट किए गए सभी कार्यों के बारे में परेशान नहीं करना चाहते हैं, मैंने कुछ मानदंडों के आधार पर एक नमूने पर ध्यान केंद्रित करने का विकल्प चुना: फ़ंक्शन को चरित्र, कारक, तार्किक और संख्यात्मक वैक्टर दोनों पर काम करना चाहिए, इसे NA और अन्य समस्याग्रस्त मूल्यों के साथ उचित रूप से निपटना चाहिए, और आउटपुट 'समझदार' होना चाहिए, यानी चरित्र या अन्य ऐसी नीरसता के रूप में कोई अंक नहीं।
मैंने अपना स्वयं का एक फ़ंक्शन भी जोड़ा, जो कि rle
अधिक सामान्य उपयोग के लिए अनुकूलित को छोड़कर क्रिस्पी के समान विचार पर आधारित है :
library(magrittr)
Aksel <- function(x, freq=FALSE) {
z <- 2
if (freq) z <- 1:2
run <- x %>% as.vector %>% sort %>% rle %>% unclass %>% data.frame
colnames(run) <- c("freq", "value")
run[which(run$freq==max(run$freq)), z] %>% as.vector
}
set.seed(2)
F <- sample(c("yes", "no", "maybe", NA), 10, replace=TRUE) %>% factor
Aksel(F)
# [1] maybe yes
C <- sample(c("Steve", "Jane", "Jonas", "Petra"), 20, replace=TRUE)
Aksel(C, freq=TRUE)
# freq value
# 7 Steve
मैंने परीक्षण डेटा के दो सेटों पर, के माध्यम से पांच कार्यों को चलाने का अंत किया microbenchmark
। समारोह के नाम उनके संबंधित लेखकों को संदर्भित करते हैं:
क्रिस के समारोह के लिए method="modes"
और सेट किया गया थाna.rm=TRUE
डिफ़ॉल्ट रूप से इसे और अधिक तुलनीय है, लेकिन अन्य की तुलना में है कि कार्यों के रूप में उनके लेखकों द्वारा यहां प्रस्तुत इस्तेमाल किया गया बनाने के लिए।
अकेले गति के मामले में केन्स संस्करण हाथ से जीतता है, लेकिन यह इनमें से केवल एक ही है जो केवल एक मोड की रिपोर्ट करेगा, कोई फर्क नहीं पड़ता कि वास्तव में कितने हैं। जैसा कि अक्सर होता है, गति और चंचलता के बीच व्यापार बंद हो जाता है। में method="mode"
, क्रिस का संस्करण एक मान लौटाएगा अगर वहाँ एक मोड है, और एनए। मुझे लगता है कि यह एक अच्छा स्पर्श है। मुझे यह भी लगता है कि यह दिलचस्प है कि कुछ फ़ंक्शंस अद्वितीय मूल्यों की बढ़ी हुई संख्या से कैसे प्रभावित होते हैं, जबकि अन्य लगभग नहीं हैं। मैंने कारण के रूप में तार्किक / संख्यात्मक को समाप्त करने के अलावा, यह पता लगाने के लिए कोड का विस्तार से अध्ययन नहीं किया है।