【问题标题】:How to output text in the R console without creating new lines?如何在 R 控制台中输出文本而不创建新行?
【发布时间】:2013-01-01 23:10:10
【问题描述】:

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

有没有办法在不同的时间点打印而不引入换行符?

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

0%...

...

0%...2%...4%...

【问题讨论】:

    标签: r newline rstudio output-formatting


    【解决方案1】:

    使用cat() 代替print()

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

    输出:

    0%..10%
    

    【讨论】:

      【解决方案2】:

      呸,Andrie 比我快 28 秒。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              猜你喜欢
              • 2018-10-30
              • 2012-12-30
              • 1970-01-01
              • 2022-01-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多