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

如何在R控制台中输出文本而不创建新行?,r,newline,rstudio,output-formatting,R,Newline,Rstudio,Output Formatting,我想在长时间运行算法期间输出一个进度指示器。我可以很容易地从我的算法中“冒泡”出一个进度值(例如,通过调用专门为此目的提供的函数回调),但困难在于实际的文本输出过程。每次调用print都会创建一个新行,并且每个行的前缀都是[1] 有没有一种方法可以在不同的时间点打印,而不引入换行? 具体地说,我想实现一个“动画”,如果在两个不同的时间观察,它将如下所示 0%... 使用cat()代替print(): 产出: 0%..10% 呸,安德里以28秒的优势击败了我 > for (i in 1

我想在长时间运行算法期间输出一个进度指示器。我可以很容易地从我的算法中“冒泡”出一个进度值(例如,通过调用专门为此目的提供的函数回调),但困难在于实际的文本输出过程。每次调用
print
都会创建一个新行,并且每个行的前缀都是
[1]

有没有一种方法可以在不同的时间点打印,而不引入换行?

具体地说,我想实现一个“动画”,如果在两个不同的时间观察,它将如下所示

0%...

使用
cat()
代替
print()

产出:

0%..10%

呸,安德里以28秒的优势击败了我

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

也许你可以用yse
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]

如果确实需要进度条,请使用控制台输出的
txtProgressBar
。或Windows下的
winProgressBar
以获取窗口进度条。

我相信您正在
\r
中查找
cat
函数,如下所示:

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