foreachとdoMCバックエンドを使用して「マルチコア」並列処理を使用している間(調べた時点で doMC を使用しているため、他のパッケージではログを記録できませんでした。進行状況パッケージを使用して進行状況バーを取得したいのですが、進行状況 (これは Linux 端末で動作します (つまり、tcltk ポップアップはありません)。
フォークを使用していることを考えると、不可能かもしれないと想像できますが、よくわかりません。
使用目的は、連結された数百のファイルを並行してロードするときの進行状況を示すことです (通常は #!Rscript 内)。
R で「foreach()」関数を使用するときにプログレス バーを作成するにはどうすればよいですか?のようないくつかの投稿を見てきました。. これに報奨金を授与できてうれしいです。
編集
方法を教えてくれた人に 500 ポイントの報奨金を提供
- foreach とマルチコア (フォーク) タイプの並列処理を使用する
- プログレスバーを取得する
- futile.logger を使用してログを取得する
リプレックス
# load packages
library("futile.logger")
library("data.table")
library("foreach")
# create temp dir
tmp_dir <- tempdir()
# create names for 200 files to be created
nb_files <- 200L
file_names <- file.path(tmp_dir, sprintf("file_%s.txt", 1:nb_files))
# make it reproducible
set.seed(1L)
nb_rows <- 1000L
nb_columns <- 10L
# create those 200 files sequentially
foreach(file_i = file_names) %do%
{
DT <- as.data.table(matrix(data = runif(n = nb_rows * nb_columns), nrow = nb_rows))
fwrite(x = DT, file = file_i)
flog.info("Creating file %s", file_i)
} -> tmp
# Load back the files
foreach(file_i = file_names, .final = rbindlist) %dopar%
{
flog.info("Loading file %s", file_i)
# >>> SOME PROGRESS BAR HERE <<<
fread(file_i)
} -> final_data
# show data
final_data
望ましい出力
プログレスバーが印刷行で台無しにされないことに注意してください)
INFO [2018-07-18 19:03:48] Loading file /tmp/RtmpB13Tko/file_197.txt
INFO [2018-07-18 19:03:48] Loading file /tmp/RtmpB13Tko/file_198.txt
INFO [2018-07-18 19:03:48] Loading file /tmp/RtmpB13Tko/file_199.txt
INFO [2018-07-18 19:03:48] Loading file /tmp/RtmpB13Tko/file_200.txt
[ =======> ] 4%
編集2
報奨金が終了した後、期待される結果に近づくものは何もありません。
プログレスバー内でログを記録すると、すべてが台無しになります。誰かが正しい結果を得た場合、私は別の結果ベースの報奨金を差し上げます。