【发布时间】:2014-07-09 10:49:12
【问题描述】:
这真的让我大吃一惊。在我的计算机上,基本循环大约需要 8 秒:
system.time({
x <- 0
for (p in 1:2) {
for (i in 1:500) {
for (j in 1:5000) {
x <- x + i * j
}
}
}
})
x
而如果我在非并行模式下使用foreach,它确实只需要 0.7 秒!!!
system.time({
x <- 0
foreach(p = 1:2, .combine = rbind) %do%
for (i in 1:500) {
for (j in 1:5000) {
x <- x + i * j
}
}
})
x
结果是一样的,但是foreach 以某种方式能够比基本 R 更快地达到它!基础R的低效率在哪里?
这怎么可能?
事实上,我得到了与这个完全相反的结果:Why is foreach() %do% sometimes slower than for?
【问题讨论】:
-
这是一个完美的例子,说明如何编写包可以改进/增强基本方法。
-
@Richard 太好了,如果你明白为什么会发生什么,请发表答案。
-
代码被编译,最终由
make.codeBuf -
@James,是的,听起来像!
-
所以如果你把你的三重循环,把它变成一个函数,并使用
compile::cmpfun,结果函数会和foreach一样快吗?
标签: r foreach parallel-foreach