2011-01-21 6 views
28

に表示しています。時間、完了パーセント、プロセスの現在のステータスなどのステータスメッセージをユーザーに提示する関数を記述したいと思います。私はメッセージの組み立てを扱うことができますが、コンソールに印刷してスクロールアップする以外の何かをしたいと思います。 message()のようなスクロールせずに、グラフィックスを使わずにメッセージを変更したいと本当に思います。これはRで可能ですか?は状態メッセージをR

+10

"これはR.でありノーである場合のみか。" - サイモンBlomberg –

答えて

24

このような場合はどうですか?

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() 
} 
+6

'cat()'との不平を主張するR-bloggersの投稿で議論されているように、 'cat()'を使わず、 'message()'を使うことができます。 –

+1

@Dirk: 'message(...、appendLF = FALSE)'でなければならないでしょう。そうでなければ、OPが特に避けたいと思うコンソールにスクロールメッセージが現れます。 – Sharpie

+0

@Dirk 'cat()'を 'message()'に置き換えると、それぞれの更新時に改行が追加されます。改行を防ぐために余分なことをしなければなりませんか? FWIWでは、 'txtProgressBar'は' cat() 'を使います。 –

7

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

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

} 

あなたは自動的にあなたのメッセージを生成している場合、あなたはどのように多くの\ B文字を計算する必要があります正しい量をバックアップするために出力するが、それはかなり簡単である。

17

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

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

+2

それは素晴らしいです! 'tpb < - txtProgressBar(...);で、独自の更新関数を作成して設定することもできます。 myUpFun < - 関数(値){...}; tpb $ up < - myUpFun'です。そして、 'message()'を使って更新関数を書くことができますので、Dirkはノイズを抑えることができます。 ;-) –

+0

@ジョシュア:良い観察!私がカスタム更新関数を作成することを熟考していたとき、私はそれを実装するために 'txtProgressBar()'をコピーして書き直さなければならないと考えていました。 – Sharpie

+0

'plyr :: progress_text'もあります。しかし、それは単純なラッパー 'txtProgressBar'ですが、... – aL3xa

15

ここにいくつかのブリングブリングがあります。 ?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

+1

これは本当に完璧であることは素晴らしいですが、私の現在の必要性はテキストのみの解決策です。 –

+2

tcltkがポップアップしたときにあなたの質問を最後まで読まなかった。それは私が謝罪する衝動的な答えでした。おそらく、将来のあなたにはいつかそれが必要になるでしょう。 –

+0

+1素晴らしい。それは私にもTclTkについて少し学ぶように促します。 – Iterator