2013-03-28 11 views
11

Her yineleme için uzun süren bir döngüye sahibim ve ilerlemesini gerçek zamanlı olarak görmek istiyorum. Döngü çalışırken, bir for döngüsünün içindeki bir değişkeni konsola gerçek zamanlı olarak nasıl yazdırabilirim?Döngü çalışıyorken, bir döngü içindeki bir değişkenin döngüde gerçek zamanlı olarak R'ye nasıl yazdırılır?

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 

cevap

13

sonuncusu, gerçek zamanlı olarak yazdırmak böyle denemek yok: Benim için işe yaramaz döngü bittikten sonra bu baskı her şeyi, her

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

Bu Rstudio içinde iyi görünüyor ama klasik Rgui'de yenilemek için konsola tıklamanız gerekiyor (örneğin, uykuyu artırmak Sys.sleep(0.5)'un bunu görmesine yardımcı oluyor).

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

Veya Windows üst araç çubuğundan Misc seçip buffered output işaretini kaldırabilirsiniz: Sen tampon temizler flush.console kullanarak bu asabilirsiniz. Amacınız döngü sürecini takip etmek ise, tekrarlamalar çok sayıda yoluyla çalışırken


, yukarıdaki yöntemi (en azından benim gözlere) biraz akward hissediyor.

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) 

Veya daha güzel bir şey:

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

Hatalar, gerçek bir örnek yapmak muhtemelen iyi bir fikir olurdu. İşleri temizlediğiniz için teşekkürler. – Eric

+0

Eric, güncellenmiş cevabımı kontrol et, size güzel bir ilerleme çubuğu yapan işlev örneklerini ekledim. –

3

kedi işlevi komut

ilerleme takip etmek için kullanışlı kompleks açıklama yapmak için izin verdiğini durumda ilerleme çubukları kullanmak daha hoş olabilir
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

Her yineleme için saniyeler içinde zaman eklemeyi düşünüyordum. +1 – Eric