在一条显示行上显示循环计数器

Cyr*_*s S 7 counter loops r

我在以下种类的R中运行循环:

for(i in 1:N){...}
Run Code Online (Sandbox Code Playgroud)

我想有一个计数器,显示i循环进度的当前值.我希望这能跟踪我到达循环结束的距离.一种方法是简单地插入print(i)循环代码.例如,

for(i in 1:N){
...substantive code that does not print anything...
print(i)
}
Run Code Online (Sandbox Code Playgroud)

这样可以完成工作,为您提供i正在运行的工作.问题是它在新行上打印每个值,la,

[1] 1
[1] 2
[1] 3
Run Code Online (Sandbox Code Playgroud)

这会占用大量的控制台空间; 如果N它很大,它将耗尽所有控制台空间.我想要一个不会占用太多控制台空间的柜台.(有时能够向上滚动控制台以检查确定您正在运行您认为正在运行的内容是很好的.)所以,我想要一个显示为的计数器,

[1] 1 2 3 ...
Run Code Online (Sandbox Code Playgroud)

一旦达到控制台宽度,继续进入新线路.我不时看到这个.实现这一目标的任何技巧?

Mar*_*ann 10

尝试使用函数flush.console()

for (i in 1:10){
 cat(paste(i, " ")); flush.console()
}
Run Code Online (Sandbox Code Playgroud)

1  2  3  4  5  6  7  8  9  10
Run Code Online (Sandbox Code Playgroud)

这里对代码进行了一些小修改,只打印一个单个数字,并在每次运行时递增.它使用回车符(\ r)序列来避免控制台中的一长串数字.

for(i in 1:100) {  
  Sys.sleep(.1)      # some loop operations
  cat(i, "of 100\r") 
  flush.console()
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*now 7

查看函数txtProgressBar,winProgressBar(仅限windows)和tkProgressBar(tcltk包)作为在循环中显示进度的其他方法.

在某些控制台上,您还可以在cat语句中使用"\ r"或"\ b"返回到行的开头并覆盖上一个迭代编号.