foreach()将多个绘图并行保存到磁盘

时间:2017-06-02 13:52:10

标签: r ggplot2 foreach parallel-processing

我试图找出并行化是否可以加快将绘图写入磁盘。为此,我当然需要提出并行绘图的工作代码。这就是我试过的:

rm(list = ls())

library(ggplot2)
library(foreach)
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)

data(diamonds)

cuts <- unique(diamonds$cut)

foreach(i=1:length(cuts), .packages = "ggplot2") %dopar% {
  ggplot(filter(diamonds, cut == cuts[i])) +
    geom_line(aes(x = carat, y = price)) +
    theme(legend.position = "none") +
    ggtitle(cuts[i])
  ggsave(filename = paste0(i, ".png"))
}

上面的代码适用于%do%,但不适用于%dopar%,我遇到以下错误:

Error in { : task 1 failed - "comparison (1) is possible only for atomic and list types"

任何提示我做错了什么?

1 个答案:

答案 0 :(得分:3)

假设您的filter应该是来自filter的{​​{1}}。您当前拨打的dplyr正在呼叫filter(您可以通过运行来证明您收到同样的错误:stats::filter()

当您使用stats::filter(diamonds, cut == cuts[1])运行代码时,dplyr路径上可能有search(),但是如果您需要在%do%参数中导出代码想在.packages中使用它(即:%dopar%)。

.packages = c("ggplot2","dplyr")来电:

foreach