web-dev-qa-db-ja.com

新しい行を作成せずにRコンソールでテキストを出力する方法は?

長時間実行しているアルゴリズムの実行中に進行状況インジケーターを出力したいと思います。アルゴリズム内から進捗値を簡単に「バブルアップ」できます(たとえば、この目的のために提供された関数コールバックを呼び出すなど)。しかし、実際のテキスト出力プロセスには問題があります。 printを呼び出すたびに新しい行が作成され、各行には[1]というプレフィックスが付きます。

改行を導入せずに、異なる時点で印刷する方法はありますか?

具体的には、2つの異なる時間で観察した場合、次のように見える「アニメーション」を実現します。

0%...

...

0%...2%...4%...
48
DuckMaestro

cat()の代わりにprint()を使用します。

cat("0%")
cat("..10%")

出力:

0%..10%
53
Andrie

ああ、アンドリーは私を28秒で打ちました。

> for (i in 1:10) {
+ cat(paste("..", i, ".."))
+ }
.. 1 .... 2 .... 3 .... 4 .... 5 .... 6 .... 7 .... 8 .... 9 .... 10 ..
9
Roman Luštrik

たぶん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]
8
agstudy

そのようなプログレスバーが本当に必要な場合は、コンソール出力にtxtProgressBarを使用してください。または、ウィンドウ付きプログレスバーの場合は、WindowsでwinProgressBar

5
Stephan Kolassa

以下のようなcat関数で\rを探していると思います:

for(i in 1:100) {
    cat('\r',
            i,
            '% |',
            rep('=', i / 4),
            ifelse(i == 100, '|\n',  '>'), sep = '')
    Sys.sleep(.1)
}
0
TPArrow