2016-07-05 26 views
0

parSapply関数を使用して、並列環境でシミュレーションを実行しています。ここに私のコードです:parSapplyと進行状況バー

runpar <- function(i) MonteCarloKfun(i=i) 

# Detect number of cores available 
ncores <- detectCores(logical=TRUE) 

# Set up parallel environment 
cl <- makeCluster(ncores, methods=FALSE) 

# Export objects to parallel environment 
clusterSetRNGStream(cl,1234567) # not necessary since we do not sample 
clusterExport(cl, c("kfunctions","frq","dvec","case","control","polygon", "MonteCarloKfun", "khat", 
        "as.points", "secal")) 

# For 1 parameter use parSapply 
outpar <- parSapply(cl,i,runpar) 

# close parallel environment 
stopCluster(cl) 

parSapply機能に進捗バーを追加する可能性があるかどうかは誰にも知られています。理想的には、pbapplyライブラリのpbapplyに似たものが欲しいです。

+0

http://finzi.psych.upenn.edu/library/surveillance/html/plapply.html – hrbrmstr

答えて

1

機能はプログレスバーをサポートしていないので、タスク関数に余分なコードを追加することによって実際に実装する方法はないと思います。

doSNOWパッケージはプログレスバーをサポートしているため、直接使用するか、parSapplyのように動作するラッパー関数を記述することができます。あなたは簡単にどちらかtkProgressBarwinProgressBar機能を使用するには、この機能を変更することができ

# This function is similar to "parSapply", but doesn't preschedule 
# tasks and doesn't support "simplify" and "USE.NAMES" options 
pbSapply <- function(cl, X, FUN, ...) { 
    registerDoSNOW(cl) 
    pb <- txtProgressBar(max=length(X)) 
    on.exit(close(pb)) 
    progress <- function(n) setTxtProgressBar(pb, n) 
    opts <- list(progress=progress) 
    foreach(i=X, .combine='c', .options.snow=opts) %dopar% { 
    FUN(i, ...) 
    } 
} 

:ここでは、そのようなラッパー関数を記述するための一つの方法です。これは事前スケジュールを使用していないので、あなたは小さなタスクを持っている場合、パフォーマンスがparSapplyほど良くないことを

library(doSNOW) 
cl <- makeSOCKcluster(3) 
x <- pbSapply(cl, 1:100, function(i, j) {Sys.sleep(1); i + j}, 100) 

注:

ここpbSapplyの使用例です。

関連する問題