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

How can I know how many iterations a for loop has done?

例如我有一个for循环

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

我的计算时间比较长,所以循环运行了很长时间。我想知道我的循环已经进行了多少次迭代,而不必在每次迭代中都打印出 k

您需要向控制台输出i。当然,这会进一步减慢执行速度。因此,不要输出每个 i:

for (i in seq_len(1e4)) {
    if (i %% 1e2 == 0L) message(i)
    Sys.sleep(0.01) #some slow code
}

很可能您编写了低效的代码,这些代码本可以提高许多数量级的速度。

我建议你先 运行 k in 1:101:100 然后 profile 它来检测代码的热点,然后循环大量的次数。阅读 ?Rprof?summaryRprof

基于此测试,您还可以估算 10000 次迭代所需的时间。

乍一看这并没有回答你的问题,但这类问题最终是关于加速代码的,所以简单地监控进度没有任何帮助。

如果您 运行 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...]
}

基于https://ryouready.wordpress.com/2009/03/16/r-monitor-function-progress-with-a-progress-bar/

添加进度条 - 我更喜欢文本栏,但 link

中有更多方法
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) 替换为您在循环中放入的任何代码(这只是为了减慢速度并向您展示进度)