【问题标题】:Overwrite current output in the R console覆盖 R 控制台中的当前输出
【发布时间】:2023-04-11 07:40:01
【问题描述】:

我一直在玩 R 函数 txtProgressBar()。如何劫持函数覆盖控制台中当前输出的能力?

即进度条更新如下:

> some R function
============

变成

> some R function
========================

不是

> some R function
============
========================

例如,如何编写将在控制台中显示当前时间的函数:

> some R function
13:01

变成

> some R function
13:02

不是

> some R function
13:01
13:01
13:01
13:01
13:02
13:02
13:02
13:02

【问题讨论】:

标签: r date time console


【解决方案1】:

如果你想使用函数message打印一些东西,你可以将它的参数appendLF设置为FALSE以避免它打印一个新行,然后使用回车符('\r')返回到行首,例如:

for (i in 1:5) {
  message('\r', i, appendLF = FALSE)
}

【讨论】:

    【解决方案2】:

    这个程序似乎可以工作:

    while (1) {
    cat('\b\b\b\b\b\b',format(Sys.time(),'%H:%M'))
    flush.console() 
    }
    

    有什么理由这可能是个坏主意吗?

    /edit:更好(感谢@Greg Snow):

    while (1) {
    cat('\r',format(Sys.time(),'%H:%M:%S'))
    flush.console() 
    }
    

    【讨论】:

    • \b 反斜杠字符可能会导致捕获控制台输出的程序(例如 TextMate 和 SublimeText)出现问题。发生的情况是输出如下所示: (0 tests)\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b (1 次测试)\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b...(99 次测试)\b\ b\b\b\b\b\b\b\b 没有解决方案我找到了 ATM,如果你打算发布你的作品供他人使用,请记住一些事情
    • @Zach 我不知道,当我使用的东西出现问题时,我才注意到 \b 问题
    【解决方案3】:

    你可以使用 "\r" 代替 "\b\b\b\b" 转到行首并覆盖行中的所有内容(确保仍然使用 cat 并且不要放入换行)。

    但如果您想显示进度,最好使用 winProgressBar(仅限 Windows)或 tkProgressBar(tcltk 包,所有平台),除了进度条之外,还可以使用标签进行更新。

    在窗口上,您还可以使用 setWindowTitle 或 setStatusBar 函数将此类信息放入较大窗口的顶部或底部。

    【讨论】:

      【解决方案4】:

      我认为无法在控制台上进行覆盖。没有退格转义序列。可以绘制进度条,因为 cat 函数不会发出 cr,除非被告知这样做。

      编辑: 我错了。退格字符被识别:

      for (i in 1:1000) {
           cat(as.character(Sys.time())) 
           flush.console() 
           for(i in 1:19) {cat("\8")} }
      

      【讨论】:

      • 明白了。所以我可以打印13:01 并将其更新为13:01 13:02 而不是13:02
      【解决方案5】:

      当然可以:

      while(1) {
        cat("\b\b\b\b\b\b\b\b",format(Sys.time(), "%H:%M:%S"),sep="")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-02
        • 1970-01-01
        • 2018-11-22
        • 1970-01-01
        • 1970-01-01
        • 2016-07-30
        • 1970-01-01
        相关资源
        最近更新 更多