6

R中,我有时会有一个很长的for looplapply我想知道的正在进行的进度。

以下内容符合我想要但不起作用的精神:

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

理想情况下,上述内容将ilapply.

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

4

3 回答 3

8

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

lapply(1:1000, function(i){print(i); flush.console()})

请注意,这会稍微减慢代码速度。

于 2012-12-12T03:30:38.873 回答
6

使用 plyr 的解决方案

 l_ply(1:10,function(x) x+1,.progress='text')

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

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

或使用选项 print ,以获取每次迭代的结果

     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]
于 2012-12-12T03:29:54.207 回答
3

您可能还想查看winProgressBartkProgressBar或等函数txtProgressBar。windows 和 tk 版本很好,因为它们可以显示您的进度,但不会弄乱您的输出。

于 2012-12-12T04:33:31.630 回答