我怎么知道for循环完成了多少次迭代?

时间:2017-06-12 07:21:26

标签: r for-loop iteration progress-bar

例如我有一个for循环

for(k in 1:10000){
    Sys.sleep(1) # replaces a long calculation
}

我的计算需要很长时间,因此循环运行了很长时间。我想知道我的循环已经完成了多少次迭代,而不必在每次迭代中打印出k

4 个答案:

答案 0 :(得分:4)

我建议您首先运行k in 1:101: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)(这只是为了减缓并向你显示进度)

enter image description here