例如我有一个for循环
for(k in 1:10000){
Sys.sleep(1) # replaces a long calculation
}
我的计算需要很长时间,因此循环运行了很长时间。我想知道我的循环已经完成了多少次迭代,而不必在每次迭代中打印出k
。
答案 0 :(得分:4)
我建议您首先运行k in 1:10
或1:100
,然后个人资料,以便在循环大量次数之前检测代码的热点。阅读?Rprof
和?summaryRprof
。
根据此测试,您还可以估算10000次迭代所需的时间。
乍一看这并没有回答你的问题,但这种问题最终是关于加快代码的速度,所以简单地监控进度无助于此。
答案 1 :(得分:3)
您需要将i
输出到控制台。当然,这将进一步减慢执行速度。因此,不要每i
输出
for (i in seq_len(1e4)) {
if (i %% 1e2 == 0L) message(i)
Sys.sleep(0.01) #some slow code
}
很可能你写的代码效率低下,而且代码可以快几个数量级。
答案 2 :(得分:3)
如果您运行Windows,您也可以使用Windows进度条小部件:
N<-100
pb <- winProgressBar(title = "Progress Bar", label="0% done", min = 0, max =N , width = 300, initial=0)
for(i in 1:N){
setWinProgressBar(pb, i,label=paste( i/N*100,"% done"))
[...your code here...]
}
答案 3 :(得分:3)
基于https://ryouready.wordpress.com/2009/03/16/r-monitor-function-progress-with-a-progress-bar/
添加进度条 - 我更喜欢文字栏,但链接还有更多方法
total <- 10000
# create progress bar
pb <- txtProgressBar(min = 0, max = total, style = 3)
for(i in 1:total){
Sys.sleep(0.01)
# update progress bar
setTxtProgressBar(pb, i)
}
close(pb)
你可以用你在循环中放入的任何代码替换Sys.sleep(0.01)(这只是为了减缓并向你显示进度)