Подтвердить что ты не робот

Запустить цикл for параллельно в R

У меня есть цикл for, который выглядит примерно так:

for (i=1:150000) {
   tempMatrix = {}
   tempMatrix = functionThatDoesSomething() #calling a function
   finalMatrix =  cbind(finalMatrix, tempMatrix)

}

Не могли бы вы рассказать мне, как сделать эту параллель?

Я попробовал это на примере в Интернете, но не уверен, правильно ли синтаксис. Это также не сильно увеличило скорость.

finalMatrix = foreach(i=1:150000, .combine=cbind) %dopar%  {
   tempMatrix = {}
   tempMatrix = functionThatDoesSomething() #calling a function

   cbind(finalMatrix, tempMatrix)

}
4b9b3361

Ответ 1

Спасибо за ваши отзывы. Я просмотрел parallel после того, как я разместил этот вопрос.

Наконец, после нескольких попыток, я получил его. Я добавил код ниже, если он полезен другим

library(foreach)
library(doParallel)

#setup parallel backend to use many processors
cores=detectCores()
cl <- makeCluster(cores[1]-1) #not to overload your computer
registerDoParallel(cl)

finalMatrix <- foreach(i=1:150000, .combine=cbind) %dopar% {
   tempMatrix = functionThatDoesSomething() #calling a function
   #do other things if you want

   tempMatrix #Equivalent to finalMatrix = cbind(finalMatrix, tempMatrix)
}
#stop cluster
stopCluster(cl)

Примечание. Я должен добавить примечание о том, что если пользователь выделяет слишком много процессов, пользователь может получить эту ошибку: Error in serialize(data, node$con) : error writing to connection

Примечание. Если .combine в операторе foreach rbind, то конечный возвращаемый объект был бы создан путем добавления вывода каждого цикла по ряду.

Надеюсь, это полезно для людей, которые вначале пытаются выполнить параллельную обработку в R, как я.

Литература: http://www.r-bloggers.com/parallel-r-loops-for-windows-and-linux/ https://beckmw.wordpress.com/2014/01/21/a-brief-foray-into-parallel-processing-with-r/