2016-10-30 9 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で書き直す理由は見当たりません。そしてリンクに感謝します。本当に不可能なようだ –

関連する問題