R,并行写入pdf

时间:2016-10-30 12:50:59

标签: r pdf parallel-processing

我想知道并行写入pdf文件的可能性。我有很多功能,每个功能都写了很多数字。这是按顺序完成的,需要相当长的时间。

举个简单的例子:

plot1 <- function() plot(c(1, 2, 3, 4, 5), type="o", col="blue")
plot2 <- function() plot(c(5, 4, 3, 2, 1), type="o", col="blue")

pdf("PDFname.pdf", width = 12, height = 10)
plot1()
plot2()
dev.off()

我试图让它像这样平行:

library (parallel)

plots <- list(
  plot1 <- function() plot(c(1, 2, 3, 4, 5), type="o", col="blue"),
  plot2 <- function() plot(c(5, 4, 3, 2, 1), type="o", col="blue")
)


cl <- makeCluster(2);

pdf("PDFname.pdf", width = 12, height = 10)
clusterApply(cl, plots, function(func) func())
dev.off()

stopCluster(cl)

即使这些功能是并行实现的,我也会得到一个空的PDF文件。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

如上所述here,您无法并行绘制到同一设备。

但就并行处理而言,以下代码可以完成这项工作。但同样,由于上述原因,输出并不是你想要的。

library(parallel)

plots <- list(
  plot1 <- function() plot(c(1, 2, 3, 4, 5), type="o", col="blue"),
  plot2 <- function() plot(c(5, 4, 3, 2, 1), type="o", col="blue")
)

# getting the number of cores
no_cores <- detectCores() - 1

# Initiate the cluster
cl <- makeCluster(no_cores)

# make the function available
clusterExport(cl, "plots")

pdf("PDFname.pdf", width = 12, height = 10)

# parallel call
parLapply(cl, 1:length(plots),
          function(i) {
            plots[[i]]()})

stopCluster(cl)
dev.off()