【问题标题】:showing a status message in R在 R 中显示状态消息
【发布时间】:2011-06-12 21:41:27
【问题描述】:

我想编写一个函数,向用户显示状态消息,显示时间、完成百分比和进程的当前状态等内容。我可以处理组合消息,但我想做的不仅仅是打印到控制台并让它向上滚动,一条又一条消息。我真的很想改变消息而不像message() 那样滚动并且没有任何图形。用 R 可以吗?

【问题讨论】:

  • "这是 R。没有如果。只有如何。" ——西蒙·布隆伯格

标签: r message status statusbar


【解决方案1】:

这样的事情怎么样?

for(i in 1:10) {
  Sys.sleep(0.2)
  # Dirk says using cat() like this is naughty ;-)
  #cat(i,"\r")
  # So you can use message() like this, thanks to Sharpie's
  # comment to use appendLF=FALSE.
  message(i,"\r",appendLF=FALSE)
  flush.console()
}

【讨论】:

  • 不要使用cat(),使用message()(可以被禁止),例如今天在R-bloggers帖子中讨论的与cat()争论的问题。
  • @Dirk:它必须是message(..., appendLF = FALSE)---否则滚动消息会出现在 OP 特别想要避免的控制台上。
  • @Dirk 将 cat() 替换为 message() 会在每次更新时添加一个换行符。你必须做一些额外的事情来防止换行吗? FWIW,txtProgressBar 使用 cat()
  • Hmpf。多谢你们。猜不是在那种情况下但作为一般功能,它很可爱能够抑制线路噪声,例如通过 littler 或 Rscript 在脚本中。
  • 很高兴有人阅读了这篇文章。无耻的自我宣传:4dpiecharts.com/2011/01/20/bad-kitty
【解决方案2】:

utils 包包含 txtProgressBar 和用于更新它的函数,可用于显示进程的完成百分比。

有关如何在不滚动控制台的情况下处理更新的示例,请参阅在调用 txtProgressBar 期间创建的 up1up2up3 函数。

【讨论】:

  • 太棒了!您还可以通过:tpb <- txtProgressBar(...); myUpFun <- function(value) {...}; tpb$up <- myUpFun 创建和设置您自己的更新功能。然后你可以使用message() 编写一个更新函数,这样 Dirk 就可以抑制噪音。 ;-)
  • @Joshua:很好的观察!当我考虑创建一个自定义更新函数时,我设想必须复制和重写txtProgressBar() 才能实现它。
  • 还有plyr::progress_text。这是txtProgressBar 的简单包装器,不过...
【解决方案3】:

这里有一些金光闪闪的东西。来自?tcltk::tkProgressBar

pb <- tkProgressBar("test progress bar", "Some information in %",
        0, 100, 50)
Sys.sleep(0.5)
u <- c(0, sort(runif(20, 0 ,100)), 100)
for(i in u) {
    Sys.sleep(0.1)
    info <- sprintf("%d%% done", round(i))
    setTkProgressBar(pb, i, sprintf("test (%s)", info), info)
}
Sys.sleep(5)
close(pb)

【讨论】:

  • 对于完整性来说真的很酷,但我目前需要的是纯文本解决方案。
  • 当 tcltk 弹出时,我没有把你的问题读到最后。这是一个冲动的回答,对此我深表歉意。也许未来的你有一天会需要它。
  • +1 太棒了。它甚至激励我学习一些关于 TclTk 的知识。
【解决方案4】:

可能有更优雅的方法可以做到这一点,但这可以做到:

test.message <- function() {
  for (i in 1:9){
    cat(i)
    Sys.sleep(1)
    cat("\b")
  }

}

如果您要自动生成消息,则需要计算要输出多少个 \b 字符以备份正确的数量,但这非常简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多