我想知道并行写入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文件。
感谢您的任何建议。
答案 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()