在R控制台中如何输出文本而不创建新行?

52
我希望在运行漫长的算法时输出进度指示器。我可以轻松地从我的算法中“冒泡出”进度值(例如通过调用专门为此目的提供的函数回调),但实际文本输出过程中存在困难。每次调用print都会创建一个新行,并且每个前缀都带有[1]有没有一种方法可以在不引入换行符的情况下在不同时间打印内容? 具体来说,我想要实现以下“动画”,如果在两个不同时间观察它,它将如下所示:
0%...

...

0%...2%...4%...
5个回答

61

使用cat()代替print()

cat("0%")
cat("..10%")

输出:

0%..10%

13

呸,Andrie比我快了28秒。

> for (i in 1:10) {
+ cat(paste("..", i, ".."))
+ }
.. 1 .... 2 .... 3 .... 4 .... 5 .... 6 .... 7 .... 8 .... 9 .... 10 ..

9
也许您可以使用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]

6
如果您确实需要进度条,可以使用txtProgressBar在控制台输出。或者在Windows下使用winProgressBar来显示窗口式的进度条。

1

我相信您正在cat函数中查找像下面这样的\r:

for(i in 1:100) {
    cat('\r',
            i,
            '% |',
            rep('=', i / 4),
            ifelse(i == 100, '|\n',  '>'), sep = '')
    Sys.sleep(.1)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接