與data.table和基礎R
# 10000 column dummy matrix
cols <- 10000
mat <- matrix(rnorm(100*cols), ncol=cols)
的回答隨着data.table一個選項:
library(data.table)
dt1 <- data.table(mat)
# sort every column, return first 5 rows
dt1[, lapply(.SD, sort, decreasing=T)][1:5]
system.time(dt1[, lapply(.SD, sort, decreasing=T)][1:5])
結果:
user system elapsed
2.904 0.013 2.916
在普通的老基地,它實際上更快! (感謝您的評論阿倫)
system.time(head(apply(mat, 2, sort, decreasing=T), 5))
user system elapsed
0.473 0.002 0.475
然而,無論是比上面的代碼示例更快,根據system.time()
system.time(
apply(mat, MARGIN=2, FUN=function(x) {
head(order(x, decreasing=TRUE, na.last=NA), 5)
}))
user system elapsed
3.063 0.031 3.094
有多少行,你呢? – Arun 2014-10-29 18:04:03
在我的情況下,它只是100.但是,這裏的行代表銷售的商品,可能高達1M。所以這種情況對其他人來說可能很有趣 – RInatM 2014-10-30 09:42:26