Ответ 1
> a <- c(1:100)
> tail(sort(a),5)
[1] 96 97 98 99 100
У меня есть вектор, и я могу вернуть самое высокое и самое низкое значение, но как вернуть 5 самых высоких значений? Для этого существует простое однострочное решение?
> a <- c(1:100)
> tail(sort(a),5)
[1] 96 97 98 99 100
x[order(x)[1:5]]
Да, head( X, 5)
где X
- ваш отсортированный вектор.
tail(sort.int(x, partial=length(x) - 4), 5)
Использование sort.int с частичным имеет то преимущество, что (потенциально) быстрее (потенциально) не выполнять полный сортировку. Но на самом деле моя реализация выглядит немного медленнее. Может быть, это связано с тем, что с параметром partial!= NULL используется сортировка оболочки, а не быстрая сортировка?
> 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