2010-09-11 5 views

Répondre

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

Ou 'tête (tri (a, décroissante = TRUE), 5)' – Marek

+0

queue est légèrement plus rapide que la tête et la diminution = TRUE > x <- rnorm (50000000) > system.time (queue (tri (x), 5)) système utilisateur écoulé 22,64 0,25 22,95 > system.time (tête (tri (x, diminuant = TRUE), 5)) système utilisateur écoulé 23,26 0,20 23,51 – Thierry

+0

@Thierry Vous devez faites cela plus d'une fois et prenez le temps moyen. Parce que je pense qu'il n'y a pas de différence (statistiquement parlant), basé sur mes simulations. – Marek

2

Oui, head(X, 5)X est votre vecteur trié.

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

L'utilisation sort.int avec partielle a l'avantage d'être (potentiellement) plus rapidement par (potentiellement) ne pas faire une sorte complète. Mais en réalité, ma mise en œuvre semble un peu plus lente. Peut-être est-ce parce que, avec le paramètre partial! = NULL, le tri de shell est utilisé plutôt que le tri rapide?

> 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

Si vous utilisez plutôt x <-runif (1e6), vous en verriez les avantages. Notez que les 5 valeurs que vous récupérez seront en effet les 5 plus élevées, mais pas nécessairement dans un ordre trié. – Tommy

Questions connexes