3

実行に時間がかかる関数を作成しました(予測モデルのテストと組み合わせた巨大なデータセットでの1000以上のループのため)。

関数が呼び出されている間、ステータスを知るためmessageに、関数のforループ内でコマンドを使用します。問題は、関数が終了した後、すべてのメッセージがすぐに表示されるのではなく、コンソールに表示されることです。だからそれは私を助けません:)

Stackoverflowで解決策を見つけようとしましたが、見つかりませんでした。たとえば、「 Rでステータスメッセージを表示する」という質問を探しました。そのトピックのすべての回答とサンプルコードは、関数が処理された後、すぐにではなく、コンソールにテキストのみを表示します。

これを解決する方法は?messageコンソールにテキストがすぐに印刷されないようにするRの設定はありますか?

注:以下で試した例では、関数と同じ結果が得られます。関数の処理後にテキストを表示します。

example1(Joshua Ulrich):

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

example2(タイラー):

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

編集:最初の例は機能します(「フラッシュコンソール」が問題でした)...しかし、私がそれをテストしたとき、私は何らかの理由でフラッシュコンソールをコメントアウトしました:S

4

3 に答える 3

3
test.message <- function() {
     for (i in 1:9){
       cat(paste(as.character(i),'\n'))
       flush.console()
       Sys.sleep(1)
     }
   }

これはfotNeltonによる推奨に似ています。

編集:ttmaccerはおそらく正しいです。Ubuntuサーバーでテストしたところ、コンソールをフラッシュしなくてもコードは機能します。

于 2012-06-04T11:57:05.290 に答える
1

これはおそらくWindows固有の問題だと思います。LinuxまたはcygwinシェルでRを実行している場合、flush.console()は必要ない場合があります。

于 2012-06-04T15:05:53.453 に答える
0

プログレスバー機能(、、、または)のいずれかを使用することに興味があるかもしれwinProgressBarませtkProgressBartxtProgressBar。winバージョンはウィンドウでのみ機能しますが、winバージョンとtkバージョンには、出力が乱雑になるのではなく、別の小さなウィンドウを開いて進行状況を表示するという利点があります。

ループの進行状況は進行状況バーで表示できますが、その他の詳細情報は更新してlabel引数で表示できます。

于 2012-06-04T15:52:44.250 に答える