【R】并行可视化 by 进度条

缘由

在用R进行并行计算的时候,不能用“cat()”或者“print()”之类的函数来追踪程序的运行进度,令人十分不快乐。尤其是当并行数目多或者程序复杂运行较慢的时候,你甚至都分不清它是在乖乖运行还是在偷懒休息,真是令人头秃。

代码实现


require(doSNOW)
require(tcltk)

cls <- makeSOCKcluster(2)
registerDoSNOW(cls)

ssize <- 20
pb <- txtProgressBar(max=ssize, style=3, char = "*",)

progress <- function(n) setTxtProgressBar(pb, n)
opts <- list(progress=progress)

r <- foreach(i=1:ssize, .options.snow=opts) %dopar% {
  Sys.sleep(1)
  i*i
}
# 此处空一行哦
r
close(pb)
stopCluster(cl)

注意:

  • txtProgressBar的相关指令大家可以去R里面help()看一下就清楚了,char:默认"=",表示进度过程的符号,我比较喜欢星星就换成“*”了。
  • 强迫症在计算完r之后一定要空一行哦!有的时候,我们需要把结果写进文件或者输出结果看一下,但是如果不空行,此行的命令会接在进度条后头,巨丑无比!

我暂时只发现doSNOW包可以这样用,其他的都没尝试成功,大家有会的也可以分享在评论区,大家一起交流学习,共同进步。

今天突然感觉这不声不响在服务器运行的程序像极了做科研的我,努力着却看不见什么效果。所以突然就理解导师了,那种生气就像是我看着跑了一天了还一动不动的程序,没有任何反馈。

要是默默的跑了好久好久突然给我报个错误,我真的是更火大了。将心比心,导师看到汇报时一事无成甚至还把东西理解得一塌糊涂的自己是不是也很生气呢?

所以呀,得学会可视化。尤其是时间的可视化。

加油哇!悲伤总会过去,美好会扑面而来的。

你可能感兴趣的:(R语言学习笔记)