R の新しいバージョンを使用している場合、これは簡単です。秘訣は、任意のコアで任意の順序で実行できる関数を作成することです。まず、データ フレームを作成します。
test.df = data.frame(id=1:250, x=rnorm(250),y=rnorm(250))
次に、各コアで実行される関数を作成します。
#I could also pass the row or the entire data frame
myplot = function(id) {
fname = paste0("/tmp/plot", id, ".png")
png(fname)
plot(test.df$x[id], test.df$y[id],
xlab="chi",ylab="psi")
dev.off()
return(fname)
}
次に、パッケージをロードしparallel
ます (これはベース R に付属しています)
library(parallel)
そして使用するmclapply
no_of_cores = 8
##Non windows
mclapply(1:nrow(test.df), myplot,
mc.cores = no_of_cores)
##All OS's
cl = makeCluster(no_of_cores)
clusterExport(cl, "test.df")
parSapply(cl, 1:nrow(test.df), myplot)
stopCluster(cl)
ここには 2 つの利点があります。
- パッケージ
parallel
にはRが付属しているため、余分なものをインストールする必要はありません
「並列」部分をオフにできます。
sapply(1:nrow(test.df), myplot)