長時間実行しているアルゴリズムの実行中に進行状況インジケーターを出力したいと思います。アルゴリズム内から進捗値を簡単に「バブルアップ」できます(たとえば、この目的のために提供された関数コールバックを呼び出すなど)。しかし、実際のテキスト出力プロセスには問題があります。 print
を呼び出すたびに新しい行が作成され、各行には[1]
というプレフィックスが付きます。
改行を導入せずに、異なる時点で印刷する方法はありますか?
具体的には、2つの異なる時間で観察した場合、次のように見える「アニメーション」を実現します。
0%...
...
0%...2%...4%...
cat()
の代わりにprint()
を使用します。
cat("0%")
cat("..10%")
出力:
0%..10%
ああ、アンドリーは私を28秒で打ちました。
> for (i in 1:10) {
+ cat(paste("..", i, ".."))
+ }
.. 1 .... 2 .... 3 .... 4 .... 5 .... 6 .... 7 .... 8 .... 9 .... 10 ..
たぶんplyr
l_ply(1:4,function(x) x+1,.progress= progress_text(char = '+'),.print=TRUE)
| | 0%[1] 2
|++++++ | 25%[1] 3
|+++++++++++++++ | 50%[1] 4
|++++++++++++++++++++++ | 75%[1] 5
|++++++++++++++++++++++++++++++++ | 100%[1]
そのようなプログレスバーが本当に必要な場合は、コンソール出力にtxtProgressBar
を使用してください。または、ウィンドウ付きプログレスバーの場合は、WindowsでwinProgressBar
。
以下のようなcat
関数で\r
を探していると思います:
for(i in 1:100) {
cat('\r',
i,
'% |',
rep('=', i / 4),
ifelse(i == 100, '|\n', '>'), sep = '')
Sys.sleep(.1)
}