我想使用R' parallel'库使用' ggplot2'并行化生成一些图。库在尝试在RStudio中执行此操作时遇到了障碍。在IDE中,mclapply交替冻结会话,或者无法运行ggsave()将绘图写入磁盘(没有给出错误或警告)。当它在RStudio外面运行时,它可以100%完美地工作。我猜测RStudio正在用图形设备做些讨厌的东西,但我无法弄清楚是什么或解决了什么(我也试过png()/ dev.off(),同样的问题)。这是重现问题的代码:
library(ggplot2)
library(parallel)
mclapply(
0:4,
function(n) {
df <- data.frame(x = runif(10), y = runif(10))
p <- ggplot(df, aes(x, y)) + geom_point()
ggsave(
paste0('mclapply-', n, '.png'),
plot = p,
device = 'png',
width = 4,
height = 4
)
return(n)
}
)
有关解决方法的任何建议吗?
在macOS 10.13.4上编辑:R 3.4.4 + RStudio 1.1.419 + ggplot2 2.2.1; mclapply()在Windows上恢复lapply()(不支持它)。
答案 0 :(得分:0)
ggsave
软件包而不是foreach
,则 mcapply
似乎在并行处理期间起作用:
library(foreach)
cl <- parallel::makeCluster(parallel::detectCores())
doParallel::registerDoParallel(cl)
foreach(n = 1:4, .packages = 'ggplot2') %dopar% {
df <- data.frame(x = runif(10), y = runif(10))
p <- ggplot2::ggplot(df, aes(x, y)) + geom_point()
ggplot2::ggsave(
paste0('mclapply-', n, '.png'),
plot = p,
device = 'png',
width = 4,
height = 4
)
return(n)
}
parallel::stopCluster(cl)
该文件位于:macOS 10.13.6,R 3.5.1和RStudio 1.1.453