2010-09-11 10 views

Respuesta

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

O 'cabeza (tipo (a, disminuyendo = TRUE), 5)' – Marek

+0

cola es ligeramente más rápido que la cabeza y disminuyendo = TRUE > x <- rnorm (50000000) > system.time (cola (sort (x), 5)) sistema usuario transcurrido 22,64 0,25 22,95 > system.time (cabeza (sort (x, disminuyendo = TRUE), 5)) sistema usuario transcurrido 23,26 0,20 23,51 – Thierry

+0

@Thierry Usted debe ejecutar esto más de una vez y tomar un tiempo promedio. Porque creo que no hay diferencia (estadísticamente hablando), basada en mis simulaciones. – Marek

2

Sí, head(X, 5) donde X es su vector ordenado.

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

Usando sort.int con parciales tiene la ventaja de ser (potencialmente) más rápido (potencialmente) no hacer una especie completa. Pero en realidad, mi implementación parece un poco más lenta. Tal vez esto se deba a que con el parámetro partial! = NULL, se utiliza el ordenamiento de shell en lugar de la ordenación rápida.

> 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 utiliza x <-runif (1e6), verá el beneficio. Tenga en cuenta que esos 5 valores que obtiene de hecho serían los 5 más altos, pero no necesariamente en un orden ordenado. – Tommy

Cuestiones relacionadas