2010-09-11 56 views

回答

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

或'头(排序(一个,减少= TRUE),5)' – Marek 2010-09-11 21:35:07

+0

尾稍快于头部和减小是= TRUE > X < - RNORM(50000000) > system.time(尾(排序(x)中,5)) 用户系统经过 22.64 0.25 22.95 > system.time(头(排序(X,减少= TRUE),5)) 用户系统经过 23.26 0.20 23.51 – Thierry 2010-09-11 22:28:40

+0

@Thierry你应该多跑一次,平均时间。因为我认为根据我的模拟,没有区别(统计上)。 – Marek 2010-09-13 08:06:33

2

是的,head(X, 5)其中X是您排序的向量。

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

与局部使用sort.int具有作为(可能)通过更快地(可能)不做了充分的排序的优点。但实际上,我的实现看起来有点慢。也许这是因为使用参数partial!= NULL,使用shell排序而不是快速排序?

> 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

如果你改用x <-runif(1e6),你会看到好处。请注意,您返回的5个值确实是最高的5个值,但不一定按排序顺序排列。 – Tommy 2011-04-08 00:20:26