当从RStudio中的mclapply()调用时,ggsave()不起作用;有解决方法吗?

时间:2018-05-03 01:58:23

标签: r ggplot2 rparallel

我想使用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()(不支持它)。

1 个答案:

答案 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