「喰う・書く・逃げる」に棲む処

 動物に関するデータ分析者のブログです

Rで並列処理

Rでマルチコアでループ処理させたい時にはdoParallelパッケージを使うと便利です。

使い方

registerDoParallel(detectCores())
foreach(x=c(1: n),.combine = "rbind",.export = "自作関数とか変数とか")%dopar%{
    
 ~処理~

    return(何か)
}
stopImplicitCluster()



解説

registerDoParallel(detectCores())

でCPUコアをすべて使うように設定しています(マルチコアモード開始)。


foreach(x=c(1: n),.combine = "rbind",.export = "自作関数とか変数とか")%dopar%{
  return(何か)
}

forループfor i in c(1:n){ }に相当する部分です。.combine=で処理が終わった後に結果をどんな感じで出力するのか指定できます。この例だと各ループ処理がrbind(要するに下方向にデータフレームが伸びていく)され、最後にデータフレームが出力されます。.export=で自作の関数やループ外部の変数をループ内に渡しています。「"関数XXX"が見つかりません」みたいなエラーが出てこない限り気にしなくていいと思います。


stopImplicitCluster()

マルチコアモードを終了します。

ちなみにですが、registerDoParallel()を実行せずにforeach()だけでも動きますが、この場合は並行処理(シングルコア)になるようです。