Данные:
x <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
A B
1 2
3 4
3 2
2 1")
Рабочий код:
library(data.table)
x[ head(order(A, B, decreasing = TRUE), n = 1), ]
# A B
# 1: 3 4
Альтернатива:
x[ order(A, B, decreasing = TRUE)[1], ]
действительна, но выдает строку NA
, когда nrow(x)==0
, где я бы предпочел / ожидал 0 строк. Например:
x[0,][ order(A, B, decreasing = TRUE)[1], ]
# A B
# 1: NA NA
x[0,][ head(order(A, B, decreasing = TRUE), n = 1), ]
# Empty data.table (0 rows) of 2 cols: A,B
Еще одна альтернатива, мое первое предложение:
x[ order(A, B, decreasing = TRUE), ][1,]
Это совершенно законно, но, как предположил @thelatemail (спасибо!), Оно гораздо менее эффективно в этом создает весь (реструктурированный) кадр перед тем, как дать вам первый ряд.
Еще одна альтернатива (из толпы, еще раз спасибо thelatemail):
setorder(x, -A, -B)[1]
Спасибо за все ваши ответы, но я думаю, что нашел виновника. После переопределения __FD_SETSIZE в моей программе все стало двигаться намного быстрее. Конечно, ulimit тоже нужно поднять, но без __FD_SETSIZE моя программа никогда не воспользуется им.
См. страницу с проблемой C10K . Он содержит подробное обсуждение того, как достичь цели «10000 одновременных подключений» при сохранении высокой производительности и управлении обслуживанием каждого клиента.
Он также содержит информацию о том, как повысить производительность вашего ядра при работе с большое количество подключений одновременно.