2010-09-11 36 views

Trả lời

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

Hoặc 'đầu (loại (a, giảm = TRUE), 5) ' – Marek

+0

đuôi là nhanh hơn một chút so với người đứng đầu và giảm = TRUE > x <- rnorm (50.000.000) > system.time (đuôi (loại (x), 5)) hệ thống sử dụng trôi qua 22,64 0,25 22,95 > system.time (đầu (loại (x, giảm = TRUE), 5)) hệ thống sử dụng trôi qua 23,26 0,20 23,51 – Thierry

+0

@Thierry Bạn nên chạy này nhiều hơn sau đó một lần và mất thời gian trung bình. Bởi vì tôi nghĩ rằng không có sự khác biệt (theo thống kê), dựa trên các mô phỏng của tôi. – Marek

2

Có, head(X, 5) trong đó X là véc tơ được sắp xếp của bạn.

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

Sử dụng sort.int với một phần có lợi thế là (khả năng) nhanh hơn bằng cách (khả năng) không làm một loại đầy đủ. Nhưng trong thực tế, việc triển khai của tôi xuất hiện chậm hơn một chút. Có lẽ điều này là bởi vì với tham số một phần! = NULL, loại vỏ được sử dụng chứ không phải là sắp xếp nhanh chóng?

> 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

Nếu bạn sử dụng x <-runif (1e6), bạn sẽ thấy lợi ích. Lưu ý rằng 5 giá trị bạn nhận được đó thực sự sẽ là 5 giá trị cao nhất, nhưng không nhất thiết phải theo thứ tự được sắp xếp. – Tommy

Các vấn đề liên quan