我试图找出并行化是否可以加快将绘图写入磁盘。为此,我当然需要提出并行绘图的工作代码。这就是我试过的:
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"
任何提示我做错了什么?
答案 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