在R
中,我有时会感到很长for loop
或lapply
,我想知道正在进行的进展。
以下内容符合我的想法但不起作用的精神:
lapply(1:n,function(i) { print(i); MAIN COMPUTATIONS })
理想情况下,上述内容会在i
的每次新迭代开始时打印lapply
。
问题:如何获得lapply
或for loop
已完成的迭代次数的持续进度更新?
答案 0 :(得分:7)
听起来你在Windows上使用RGui。其中一个菜单中应该有一个选项,告诉它不缓冲输出。或者,您可以在每次打印后致电flush.console
。
lapply(1:1000, function(i){print(i); flush.console()})
请注意,这会使代码变慢一些。
答案 1 :(得分: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%
或使用选项打印,以获取每次迭代的结果
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]
答案 2 :(得分:3)
您可能还想查看winProgressBar
,tkProgressBar
或txtProgressBar
等功能。 windows和tk版本很不错,因为它们可以向您显示您的进度,但不会使您的输出混乱。