I have a vector and I'm able to return highest and lowest value, but how to return 5 topmost values? Is there a simple one-line solution for this?
Or `head(sort(a, decreasing=TRUE), 5)`
Marek
2010-09-11 21:35:07
tail is slightly faster than head and decreasing = TRUE> x <- rnorm(50000000)> system.time(tail(sort(x), 5)) user system elapsed 22.64 0.25 22.95 > system.time(head(sort(x, decreasing = TRUE), 5)) user system elapsed 23.26 0.20 23.51
Thierry
2010-09-11 22:28:40
@Thierry You should run this more then once and take average time. Cause I think there is no difference (statistically speaking), based on my simulations.
Marek
2010-09-13 08:06:33
I get on average 2% faster times for user.self and elapse. The gain on sys.self is 8%. But the relevance on the gain depends on the application.
Thierry
2010-09-19 21:59:20
A:
tail(sort.int(x, partial=length(x) - 4), 5)
Using sort.int with partial has the advantage of being (potentially) faster by (potentially) not doing a full sort. But in reality, my implementation appears a little slower. Maybe this is because with parameter partial != NULL, shell sort is used rather than quick sort?
> 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
David F
2010-09-12 08:07:32