2013-05-23 17 views
32

parSapply, print, message veya cat işlevlerini kullanarak bir işlevi çağırırsam, bu işlevin konsol için çıktıkları görünmez.Paralel olarak nasıl kullanılır "yazdır" veya "kedi"

Benim süreç çok uzun zaman alır, bu yüzden ilerlemeyi görmek ve onlar yapılır gibi sonuçlar çıktı almanın bir yolunu gerekir. Paralel bir süreçten konsola yazdırmamı sağlayan özel komutlar var mı?

Örnek:

library(parallel) 

oneloop = function(x) { 
    for(i in 1:50) { 
    a = rnorm(100000) 
    a = sort(a) 
    } 
    print(x) 
    message(x) 
    cat(x) 
} 

cl <- makeCluster(5) 
output = parSapply(cl, 1:10, oneloop) 
stopCluster(cl) 
+0

sayesinde bu – Corone

+0

'etkisi flush.console' yok içerecek şekilde tadil var? –

+0

@TylerRinker, iyi fikir, ama hayır, hiçbir fark yaratmıyor. İşçi süreçlerinin çıktılarının ele geçirilmemesi gerektiğini düşünüyorum ... ... bu yüzden soru "çalışan stdout'u ana programa yönlendirebilir misiniz?", Ama şimdi spekülasyon yapıyorum. – Corone

cevap

31

bir dosyaya çıktı yönlendirmek ve daha sonra program ilerledikçe görmek için söz konusu dosyayı kontrol edebilirsiniz makeCluster yılında outfile param kullanma. konsola "" çıkışlarına ayarlama Linux makinesinde İlginçtir

, ama bu bir Windows makinede benim için çalışmaz. Dosya çıkışı her ikisinde de çalışır.

+2

Biraz farklı bir yaklaşım '% dopar% kullanarak' burada ayrıntılı olarak belgelenmiştir //viksalgorithms.blogspot. com/2012/02/izleme-ilerleme-içi-foreach-loop.html – Ben

+0

'ÇıkışDosyası = ""' Rgui ile Windows üzerinde çalışır, ancak Rterm ile yaptığı etmez. –

+3

Bunun ne kadar kötü belgelendiği garip. Tam olarak ne 'outfile'nın ne yaptığını (temel olarak 'OUT =' 'outfile' olarak terminale gönderilmekte olan bir komuta eklendikten sonra bulmadan önce iyi 15 dakika kaynak kodu ile gözyaşı dökmeliydim. "' Ile terminale gönderilmesi anlamına"' "' bağlantı 'alır mesela, 'write.table', tutarlı" 'ayarını kullanma – MichaelChirico

2

Windows üzerinde outfile ile makeCluster, doParallel paketi sürüm 1.0.8 kullanıyorum. powershell Get-Content c:/path/to/log/mylog.txt -wait basit bir Powershell komutunu kullanarak outfile'u takip edebiliyorum. Benim için çalışıyor.