2010-09-11 8 views

Antwort

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

Oder 'Kopf (sortiert (a, fallend = TRUE), 5)' – Marek

+0

Schwanz ist etwas schneller als Kopf und fallend = TRUE > x <- rnorm (50000000) > system.time (tail (sort (x), 5)) Benutzersystem verstrichene 22.64 0.25 22.95 > System.Time (Kopf (sort (x, = TRUE) abnimmt, 5)) Benutzersystem verstrichene 23,26 0,20 23,51 – Thierry

+0

@Thierry Sie sollten führe das mehr als einmal durch und nimm dir durchschnittliche Zeit. Weil ich denke, dass es statistisch gesehen keinen Unterschied gibt, basierend auf meinen Simulationen. – Marek

2

Ja, head(X, 5) wo X Ihr sortierter Vektor ist.

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

Mit sort.int mit teilweise hat den Vorteil, dass sie (potentiell) schneller von (potentiell) keine vollständige Art zu tun. Aber in Wirklichkeit erscheint meine Implementierung etwas langsamer. Vielleicht liegt das daran, dass Shell-Sortierung mit Parameter partial! = NULL verwendet wird, anstatt schnell zu sortieren?

> 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

Wenn Sie stattdessen x <-runif (1e6) verwenden, sehen Sie den Vorteil. Beachten Sie, dass diese 5 Werte, die Sie zurück erhalten, in der Tat die höchsten 5 sind, aber nicht unbedingt in einer sortierten Reihenfolge. – Tommy

Verwandte Themen