为了账号安全,请及时绑定邮箱和手机立即绑定

使用%dopar%时如何打印

使用%dopar%时如何打印

大话西游666 2019-12-21 12:59:26
我有一个与作为后端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函数可能不是线程安全的,但是除非您以高频率登录,否则您不太可能遇到任何问题。有一些需要注意的地方。


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 0 关注
  • 860 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信