2010-09-11 21 views

cevap

32
> a <- c(1:100) 
> tail(sort(a),5) 
[1] 96 97 98 99 100 
+6

ya 'kafası (çeşit: (a, = TRUE), 5 azaltılması) ' – Marek

+0

kuyruk biraz daha hızlı baş ve azalan daha = TRUE > x <- rnorm (50000000) > system.time (kuyruk (çeşit (x), 5)) kullanıcı sistemi) kullanıcı sistem geçen (5) = TRUE azaltılması, baş (bir çeşit (x) 22.64 0.25 22.95 > system.time geçen 23.26 0.20 23.51 – Thierry

+0

@Thierry Bu durumda büyük Bunu daha sonra bir kez çalıştırın ve ortalama zaman ayırın. Çünkü simülasyonlarıma dayanan bir fark olmadığını düşünüyorum (istatistiksel olarak). – Marek

2

Evet, head(X, 5) burada X düzenlenmiş vektörünüzdür. Kısmi ile

3
tail(sort.int(x, partial=length(x) - 4), 5) 

kullanarak sort.int (potansiyel olarak) daha hızlı (potansiyel olarak) tam tür yapmayarak olma avantajına sahiptir. Ama gerçekte, uygulamam biraz daha yavaş görünüyor. Belki de bunun nedeni, kısmi! = NULL parametresi ile, hızlı sıralama yerine kabuk sıralaması kullanılır.

> x <- 1:1e6 
> system.time(replicate(100, tail(sort.int(x, partial=length(x) - 4), 5))) 
    user system elapsed 
    4.782 0.846 5.668 
> system.time(replicate(100, tail(sort(x), 5))) 
    user system elapsed 
    3.643 0.879 4.854 
+0

Bunun yerine x <-runif (1e6) kullanırsanız, fayda göreceksiniz. Geri aldığınız 5 değerin gerçekten de en yüksek 5 olacağını, ancak zorunlu olarak sıralı bir sıralamada olmayacağını unutmayın. – Tommy

İlgili konular