每10次迭代打印进度1000次

时间:2014-11-04 07:21:23

标签: r for-loop printing progress

标题说明了一切。我试着寻找这个,但无济于事。

基本上,我正在运行一个包含1000次迭代的For循环,我想编写一个函数,每10次迭代显示/打印模拟的进度。

4 个答案:

答案 0 :(得分:6)

R内置的进度条怎么样?它在控制台上打印一个进度条,让您通过迭代监视进度。不幸的是,这并没有完全回答这个问题,因为它会在每一轮循环中得到更新,如果事先不知道迭代次数,那么它并不能让你达到你想要的地方。进度条的工作原理如下:

# Number of iterations
imax<-c(10)
# Initiate the bar
pb <- txtProgressBar(min = 0, max = imax, style = 3)
# Iterations
for(i in 1:imax) {
   Sys.sleep(1) # Put here your real simulation
   # Update the progress bar
   setTxtProgressBar(pb, i)
}
# Finally get a new line on the console
cat("\n")

你当然可以用模数来完成你正在寻找的东西。这是for循环的一个例子:

for(i in 1:1000) {
   # Modulus operation
   if(i %% 10==0) {
      # Print on the screen some message
      cat(paste0("iteration: ", i, "\n"))
   }
   Sys.sleep(0.1) # Just for waiting a bit in this example
}

其中一个是否适合你?

答案 1 :(得分:0)

根据您使用的语言,您的语法可能略有不同,但对于modulus division来说,这听起来像是一个问题。假设您可以访问循环计数器,可以将其除以10并检查剩余部分以查看您的计数器是否可以被10整除。

答案 2 :(得分:0)

您可能想要使用modulus operator

如果您在循环中检查迭代器并将其修改为10,则每次迭代器可以被10整除时,可以让它执行一些操作。

答案 3 :(得分:0)

虽然你已经接受了一个答案我认为我仍然会发表我的观点。您可以使用Windows进度条来监控您的进度。这里有一个很好的例子For Loop Tracking (Windows Progress Bar)。以下是我的进度条版本,但它会监控整体进度。

my_progress <- function(m)
{
  pb <- winProgressBar(title="Example progress bar", label="0 Completed", min=0, max=m, initial=0)
  for(i in 1:m) {
    Sys.sleep(0.01)
    setWinProgressBar(pb, i/(100)*100, label=round((i/100)*100))
  }
  close(pb)
  message("Tesk Completed")
}

my_progress(1000)