時間、完了率、プロセスの現在のステータスなどを示すステータスメッセージをユーザーに表示する関数を作成したいと思います。メッセージの組み立ては処理できますが、コンソールに出力してメッセージを次々に上にスクロールさせる以外のことをしたいと思います。 message()
のようにスクロールせず、グラフィックを使用せずにメッセージを変更したいのですが。これはRで可能ですか?
このようなものはどうですか?
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()
}
utils
パッケージには、txtProgressBar
とそれを更新するための関数が含まれており、プロセスの完了率を表示するために使用できます。
コンソールをスクロールせずに更新を処理する方法の例については、txtProgressBar
の呼び出し中に作成されるup1
、up2
、およびup3
関数を参照してください。
ここにいくつかのキラキラ光る。 ?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)
これを行うためのよりエレガントな方法があるかもしれませんが、これはそれを行うことができます:
test.message <- function() {
for (i in 1:9){
cat(i)
Sys.sleep(1)
cat("\b")
}
}
メッセージを自動的に生成する場合は、正しい量をバックアップするために出力する\ b文字の数を計算する必要がありますが、それは非常に簡単です。