考虑以下矩阵,
nc <- 5000
nr <- 1024
m <- matrix(rnorm(nc*nr), ncol=nc)
我希望rowMeans
在这个矩阵中随机抽取两组相同大小的组之间的差异。
n <- 1000 # group size
system.time(replicate(100, {
ind1 <- sample(seq.int(nc), n)
ind2 <- sample(seq.int(nc), n)
rowMeans(m[, ind1]) - rowMeans(m[, ind2])
}))
它很慢,不幸的是我不理解 Rprof 的输出(似乎大部分时间都花在了is.data.frame
?? 上)
对更有效的东西的建议?
我考虑过以下几点:
Rcpp
:从我的在线阅读中,我相信 R 的 rowMeans 非常有效,所以不清楚这一步是否会有所帮助。我想确信瓶颈到底在哪里,也许我的整个设计不是最理想的。如果大部分时间都花在为每个较小的矩阵制作副本上,那么 Rcpp 的性能会更好吗?更新到 R-devel,似乎有一个
.rowMeans
更有效的新功能。有人试过吗?
谢谢。