Tüm bu seçenekleri araştırıyordum ve göreceli özelliklerini ve performanslarını merak etmeye başladım, bu yüzden bazı testler yaptım. Başka birinin aynı şeyi merak etmesi durumunda, sonuçlarımı burada paylaşıyorum.
Burada yayınlanan tüm işlevler hakkında rahatsız etmek istemiyorum, birkaç kritere dayanan bir örneğe odaklanmayı seçtim: işlev hem karakter, faktör, mantıksal ve sayısal vektörler üzerinde çalışmalı, NA'lar ve diğer sorunlu değerlerle uygun şekilde ilgilenmeli, ve çıktı 'mantıklı' olmalıdır, yani karakter ya da diğer benzerlik gibi sayısallar olmamalıdır.
Ayrıca rle
, daha genel kullanım için uyarlanmış olanlar dışında, chrispy ile aynı fikre dayanan kendi fonksiyonumu ekledim :
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
Sonunda iki test verisi setinde beş fonksiyon çalıştırdım microbenchmark
. İşlev adları ilgili yazarlarına başvurur:
Chris'in işlevi method="modes"
vena.rm=TRUE
varsayılan olarak kendi yazarları tarafından burada sunulan olarak işlev kullanıldı daha o daha karşılaştırılabilir, ancak diğer yapmaya.
Tek başına hız söz konusu olduğunda, Kens versiyonu kolayca kazanır, ancak gerçekten kaç tane olursa olsun, sadece bir modu rapor edecek olanlardan sadece biridir. Çoğu zaman olduğu gibi, hız ve çok yönlülük arasında bir denge vardır. İçinde method="mode"
Chris'in sürümü bir mod, başka bir NA varsa bir değer döndürür. Bence bu hoş bir dokunuş. Ayrıca, bazı fonksiyonların artan sayıda benzersiz değerden nasıl etkilendiğini ilginç bulurken, diğerleri neredeyse o kadar değil. Nedeni olarak mantıksal / sayısal ortadan kaldırmak dışında neden olduğunu anlamak için kodu ayrıntılı olarak inceledim.