2013-03-28 6 views
11

私は、繰り返しごとに時間がかかるループがあり、リアルタイムでその進行状況を確認したいと思います。ループが実行されているときに、forループ内の変数をリアルタイムでコンソールに出力するにはどうすればよいですか?ループの実行中に、ループ内の変数をリアルタイムでコンソールにコンソールに出力するにはどうすればよいですか?

for(i in 1:10){ 
    write(i,stdout()) 
} 

for(i in 1:10){ 
    write(i,stderr()) 
} 

for(i in 1:10){ 
    print(i) 
} 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 

答えて

13

は最後の1は、リアルタイムで印刷し、このようにそれを試すん:私にとっては無用であるループが終了した後、これらの印刷はすべて、それぞれが

for(i in 1:10){ 
    Sys.sleep(0.1) 
    print(i) 
} 

これはRstudioで正常に見えますクラシックのRguiでは、リフレッシュするためにコンソールをクリックする必要があります(たとえば、睡眠を増やすには、Sys.sleep(0.5)が表示されます)。

for(i in 1:10){ 
    Sys.sleep(0.1) 
    print(i) 
    flush.console() 
} 

またはWindowsで使用すると、上部のツールバーにあるMiscを選択し、buffered outputのチェックを外すことができます:あなたは、バッファをクリアしたflush.consoleを使用していることを回避することができます。あなたの目標はあなたのループの過程を追跡することがある場合は、多数の反復を介して実行されているとき


は、上記の方法は、(少なくとも私の目に)ビットakward感じています。その場合、プログレスバーを使用してよりよいかもしれません:

n<- 1000 
pb <- txtProgressBar(min = 0, max = n, style = 3) #text based bar 
for(i in 1:n){ 
    Sys.sleep(0.001) 
    setTxtProgressBar(pb, i) 
} 
close(pb) 

、あるいはよりよい何か:

library(tcltk) 
n<- 1000 
pb <- tkProgressBar(title = "Doing something", min = 0, max = n, width = 200) 
for(i in 1:n){ 
    Sys.sleep(0.001) 
    setTkProgressBar(pb, i, label=paste(round(i/n*100,1),"% done")) 
} 
close(pb) 
+0

実際の例を作成するとよいでしょう。物事をクリアしていただきありがとうございます。 – Eric

+0

エリック、私の更新された答えを確認し、私はあなたに良い進歩の棒を作る機能の例を追加しました。 –

3

猫の機能を使用すると、スクリプトの進捗を追跡するのに便利な、複雑な文を作ることができます

for(i in 1:10){ 
    ptm0 <- proc.time() 
    Sys.sleep(0.5) 
    ptm1=proc.time() - ptm0 
    jnk=as.numeric(ptm1[3]) 
    cat('\n','It took ', jnk, "seconds to do iteration", i) 
} 

>It took 0.49 seconds to do iteration 1 
+0

私は、繰り返しごとに時間を秒単位で追加することを考えていました。 +1 – Eric

関連する問題