我有一個與作為后端foreach使用的循環。如何讓循環在每次迭代中打印出一些內容?%dopar%doSNOW我下面的代碼是我當前正在使用的代碼,但未打印任何內容。foreach(ntree=rep(25,2),.combine=combine,.packages='randomForest', .inorder=FALSE) %dopar% { print("RANDOM FOREST") randomForest(classForm,data=data,na.action=na.action,do.trace=do.trace,ntree=ntree,mtry=mtry) }
3 回答

人到中年有點甜
TA貢獻1895條經驗 獲得超7個贊
這里發布了許多好的解決方案,但是我發現最簡單的方法是登錄到套接字并使用單獨的過程在控制臺中輸出日志調用。
我使用以下功能:
log.socket <- make.socket(port=4000)
Log <- function(text, ...) {
msg <- sprintf(paste0(as.character(Sys.time()), ": ", text, "\n"), ...)
cat(msg)
write.socket(log.socket, msg)
}
然后,您可以將日志語句放入代碼中,例如:
Log("Processing block %d of %d", i, n.blocks)
可以使用任何簡單的套接字偵聽工具實時查看日志輸出。例如,在Linux上使用netcat:
nc -l 4000
上面的日志語句將在netcat終端中顯示為:
2014-06-25 12:30:45: Processing block 2 of 13
該方法的優點是可以遠程工作,并在您需要記錄時提供詳細的輸出。
ps對于Windows上的用戶,請參閱Jon Craton的netcat端口。
pps我猜write.socketR函數可能不是線程安全的,但是除非您以高頻率登錄,否則您不太可能遇到任何問題。有一些需要注意的地方。
- 3 回答
- 0 關注
- 904 瀏覽
添加回答
舉報
0/150
提交
取消