与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