что верно и в этой ситуации. Извините за двойной пост"
аюсь использоватьпакет doSMP это обеспечивает параллельный бэкэнд для пакета foreach.
Можете ли вы указать, что я делаю неправильно? Действительно, использование foreach таким образом значительно увеличивает время вычислений ...
#------register doSMP to be used with foreach------
library(doSMP)
w <- startWorkers(4)
registerDoSMP(w)
#--------------------------------------------------
#------A simple function------
sim, <- function(a, b)
{
return(10 * a + b)
}
avec <- 1:200
bvec <- 1:400
#-----------------------------
#------The naive method------
ptime <- system.time({
mat <- matrix(NA, nrow=length(avec), ncol=length(bvec))
for(i in 1:length(avec))
{
for(j in 1:length(bvec))
{
mat[i, j] <- sim(avec[i], bvec[j])
}
}
})[3]
ptime
elapsed
0.36
#----------------------------
#------Using foreach------
ptime <- system.time({
mat2 <- foreach(b=bvec, .combine="cbind") %:%
foreach(a=avec, .combine="c") %dopar%
{
sim(a, b)
}
})[3]
ptime
elapsed
86.98
#-------------------------
РЕДАКТИРОВАТЬ
Этот вопрос очень похож на этот и был перенесен из stats.stackexchange.