我想在漫长的运行算法中输出进度指示器。我可以很容易地从我的算法中“冒泡”一个进度值(例如,通过专门为此目的调用提供的函数回调),但困难在于实际的文本输出过程。每次拨打print
都会创建一个新行,每行都会以[1]
为前缀。
有没有办法在不同的时刻进行打印,而不会引入换行符?
具体而言,如果在两个不同的时间观察,我想要实现一个看起来如下的“动画”。
0%...
...
0%...2%...4%...
答案 0 :(得分:52)
使用cat()
代替print()
:
cat("0%")
cat("..10%")
输出:
0%..10%
答案 1 :(得分:8)
Bah,Andrie在28秒内击败了我。
> for (i in 1:10) {
+ cat(paste("..", i, ".."))
+ }
.. 1 .... 2 .... 3 .... 4 .... 5 .... 6 .... 7 .... 8 .... 9 .... 10 ..
答案 2 :(得分:8)
也许您可以使用plyr
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]
答案 3 :(得分:5)
如果您确实需要进度条,请使用txtProgressBar
进行控制台输出。或Windows下的winProgressBar
窗口进度条。
答案 4 :(得分:0)
我相信您正在像下面的\r
函数中寻找cat
:
for(i in 1:100) {
cat('\r',
i,
'% |',
rep('=', i / 4),
ifelse(i == 100, '|\n', '>'), sep = '')
Sys.sleep(.1)
}