2016-11-18 2 views
2

私は現在大きなデータセットを扱っており、処理には数時間かかることがあります。コードの進捗状況をプログレスバーまたは数字(1,2,3、...、100)でどのように表示することができるのだろうか。そして、結果を2つの列を持つデータフレームとして保存したいと思います。ここに例があります。ありがとう。Rの並列計算でコードの進捗を表示する方法は?

require(foreach) 
require(doParallel) 
require(Kendall) 

cores=detectCores() 
cl <- makeCluster(cores-1) 
registerDoParallel(cl) 

mydata=matrix(rnorm(8000*500),ncol = 500) 
result=as.data.frame(matrix(nrow = 8000,ncol = 2)) 
pb <- txtProgressBar(min = 1, max = 8000, style = 3) 

foreach(i=1:8000,.packages = "Kendall",.combine = rbind) %dopar%   
{ 
    abc=MannKendall(mydata[i,]) 
    result[i,1]=abc$tau 
    result[i,2]=abc$sl 
    setTxtProgressBar(pb, i) 
} 
close(pb) 
stopCluster(cl) 

ただし、コードを実行すると、進行状況バーが表示されず、結果が正しく表示されませんでした。提案はありますか?ありがとう。

答えて

6

doSNOWパッケージはプログレスバーをサポートしていますが、doParallelはサポートしていません。ここではあなたの例では、プログレスバーを配置する方法です:

require(doSNOW) 
require(Kendall) 
cores <- parallel::detectCores() 
cl <- makeSOCKcluster(cores) 
registerDoSNOW(cl) 
mydata <- matrix(rnorm(8000*500), ncol=500) 
pb <- txtProgressBar(min=1, max=8000, style=3) 
progress <- function(n) setTxtProgressBar(pb, n) 
opts <- list(progress=progress) 
result <- 
    foreach(i=1:8000, .packages="Kendall", .options.snow=opts, 
      .combine='rbind') %dopar% { 
    abc <- MannKendall(mydata[i,]) 
    data.frame(tau=abc$tau, sl=abc$sl) 
    } 
close(pb) 
stopCluster(cl) 
+0

素晴らしいです。つまり、あなたの助けをとても感謝 –

+0

こんにちは、私は並列ジョブに関する新しい質問を持っている、あなたは私を助けることができれば、私は疑問に思います! 。リンクはhttp://stackoverflow.com/questions/40941241/mpi-cluster-based-parallel-calculation-in-r-on-westgrid-pbs-fileありがとうございます。 –

関連する問題