如何被告知循环/ lapply的持续进展

Jas*_*ase 6 loops r

R,我有时会有很长时间,for loop或者lapply我想知道正在进行的进展.

像下面这样的东西是我想要的但不起作用的精神:

lapply(1:n,function(i) { print(i); MAIN COMPUTATIONS })

理想情况下,上面将i在每次新迭代开始时打印lapply.

问题:如何获得我lapplyfor loop已完成的迭代次数的持续进度更新?

Das*_*son 8

听起来你在Windows上使用RGui.其中一个菜单中应该有一个选项,告诉它不缓冲输出.或者,您可以flush.console在每次打印后打电话.

lapply(1:1000, function(i){print(i); flush.console()})
Run Code Online (Sandbox Code Playgroud)

请注意,这会使代码变慢一点.


ags*_*udy 6

使用plyr的解决方案

 l_ply(1:10,function(x) x+1,.progress='text')
Run Code Online (Sandbox Code Playgroud)

或者您可以使用定义进度 progress_text

 l_ply(1:10000,function(x) x+1,.progress= progress_text(char = '*'))
|*********************************************************************| 100%
Run Code Online (Sandbox Code Playgroud)

或者使用选项打印,以获得每次迭代的结果

     l_ply(1:4,function(x) x+1,.progress= progress_text(char = '+'),.print=TRUE)
  |                                 |   0%[1] 2
  |++++++                           |  25%[1] 3
  |+++++++++++++++                  |  50%[1] 4
  |++++++++++++++++++++++           |  75%[1] 5
  |++++++++++++++++++++++++++++++++ |  100%[1]
Run Code Online (Sandbox Code Playgroud)