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

foreach()将多个绘图并行保存到磁盘,r,ggplot2,foreach,parallel-processing,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), .

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

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"))
}
rm(list=ls())
图书馆(GG2)
图书馆(foreach)
图书馆(双平行)

cl假设您的
过滤器
应该是
dplyr
中的
过滤器
。您当前对
filter
的调用正在调用
stats::filter()
(您可以通过运行:
stats::filter(diamonds,cut==cuts[1])来证明您得到了相同的错误。

当您使用
%do%
运行代码时,您的
搜索()路径上可能有
dplyr
,但是如果您想在
%dopar%
中使用它,您需要在
.packages
参数中导出它(即:
.packages=c(“ggplot2”,“dplyr”)

新建
foreach
呼叫:

foreach(i=1:length(cuts), .packages = c("ggplot2","dplyr")) %do% {
  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"))
}

假设您的
过滤器
应该是
dplyr
中的
过滤器
。您当前对
filter
的调用正在调用
stats::filter()
(您可以通过运行:
stats::filter(diamonds,cut==cuts[1])来证明您得到了相同的错误。

当您使用
%do%
运行代码时,您的
搜索()路径上可能有
dplyr
,但是如果您想在
%dopar%
中使用它,您需要在
.packages
参数中导出它(即:
.packages=c(“ggplot2”,“dplyr”)

新建
foreach
呼叫:

foreach(i=1:length(cuts), .packages = c("ggplot2","dplyr")) %do% {
  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"))
}

@adam spannbauer我已经尝试过你的方法,但是
foreach()
循环永远不会结束。我在MacOSX上使用带R的Rstudio。有没有进一步的洞察它为什么不工作?@SeanM这里发布的代码应该不会有任何问题陷入无限循环。这可能是代码中其他地方的另一个问题。你可以试着用最少的重复来回答一个新问题example@adam-spannbauer我已经尝试过你的方法,但是
foreach()
循环永远不会结束。我在MacOSX上使用带R的Rstudio。有没有进一步的洞察它为什么不工作?@SeanM这里发布的代码应该不会有任何问题陷入无限循环。这可能是代码中其他地方的另一个问题。你可以试着用最少的例子来回答一个新问题