如果您使用的是新版本的 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
包(这带有base 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)
这里有两个优点:
- 包
parallel
自带R,所以我们不需要安装任何额外的东西
我们可以关闭“并行”部分:
sapply(1:nrow(test.df), myplot)