2013-03-28 77 views

回答

13

最後一個沒有實時打印,嘗試這樣的:

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

這看上去很好的Rstudio ,但在經典的Rgui中,您必須單擊控制檯才能刷新(例如通過增加睡眠,Sys.sleep(0.5)有助於瞭解這一點)。您可以規避使用flush.console它清除緩衝區:

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

或Windows您可以在上面選擇工具欄中Misc並取消buffered output


如果你的目標是跟蹤你的循環過程中,上述方法感覺有點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 2013-03-28 06:03:55

+0

埃裏克,檢查我更新的答案,我添加了函數的例子,這使得你一個不錯的進度條。 – 2013-03-28 06:49:20

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 2013-03-28 06:41:55