2

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

4

1 回答 1

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

于 2018-10-18T20:18:13.540 回答