2016-10-30 55 views
0

我想知道是否可以並行寫入pdf文件。我有很多功能,每個功能都寫了很多數字。這是按順序完成的,需要相當長的時間。R,並行寫入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

如提到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() 
+0

感謝您的回覆,但我也同時實現的代碼,所以我沒有看到用parLapply重寫它的原因。並感謝您的鏈接。看起來像是真的不可能 –