web-dev-qa-db-ja.com

Rでステータスメッセージを表示する

時間、完了率、プロセスの現在のステータスなどを示すステータスメッセージをユーザーに表示する関数を作成したいと思います。メッセージの組み立ては処理できますが、コンソールに出力してメッセージを次々に上にスクロールさせる以外のことをしたいと思います。 message()のようにスクロールせず、グラフィックを使用せずにメッセージを変更したいのですが。これはRで可能ですか?

30
JD Long

このようなものはどうですか?

for(i in 1:10) {
  Sys.sleep(0.2)
  # Dirk says using cat() like this is naughty ;-)
  #cat(i,"\r")
  # So you can use message() like this, thanks to Sharpie's
  # comment to use appendLF=FALSE.
  message(i,"\r",appendLF=FALSE)
  flush.console()
}
26
Joshua Ulrich

utilsパッケージには、txtProgressBarとそれを更新するための関数が含まれており、プロセスの完了率を表示するために使用できます。

コンソールをスクロールせずに更新を処理する方法の例については、txtProgressBarの呼び出し中に作成されるup1up2、およびup3関数を参照してください。

17
Sharpie

ここにいくつかのキラキラ光る。 ?tcltk::tkProgressBarから。

pb <- tkProgressBar("test progress bar", "Some information in %",
        0, 100, 50)
Sys.sleep(0.5)
u <- c(0, sort(runif(20, 0 ,100)), 100)
for(i in u) {
    Sys.sleep(0.1)
    info <- sprintf("%d%% done", round(i))
    setTkProgressBar(pb, i, sprintf("test (%s)", info), info)
}
Sys.sleep(5)
close(pb)

alt text

15
Roman Luštrik

これを行うためのよりエレガントな方法があるかもしれませんが、これはそれを行うことができます:

test.message <- function() {
  for (i in 1:9){
    cat(i)
    Sys.sleep(1)
    cat("\b")
  }

}

メッセージを自動的に生成する場合は、正しい量をバックアップするために出力する\ b文字の数を計算する必要がありますが、それは非常に簡単です。

7
Tyler