次のような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)
}
ご意見をいただきありがとうございます。この質問を投稿した後、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
注-foreach
ステートメントの_.combine
_が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 /