【问题标题】:How to provide a tidy R console update message in RStudio?如何在 RStudio 中提供整洁的 R 控制台更新消息?
【发布时间】:2022-05-12 19:20:39
【问题描述】:

这段代码让我可以在 R 控制台中(在 Windows 上)留下一个很好的消息,而不用填满屏幕:

imax <- 2000
for (i in seq_len(imax)) {
    mess <- sprintf("slightly different length message: %i", i)
    message(paste(rep("\b", nchar(mess)), collapse = ""), appendLF = FALSE)
    message(mess, appendLF = i == imax)
    flush.console()
}

在 RStudio 中,退格字符不起作用,我到处都收到可怕的附加消息。

如何在 Rgui 和 RStudio 中很好地做到这一点?

跨平台呢?

【问题讨论】:

  • 在 RStudio 中将 message 替换为 cat 对我有用。当然,您需要删除 appendLF 部分。
  • 是的,谢谢 - 希望避免 cat() 构建到一个包中。我不清楚这是否令人不悦(a la suppressMessages)。使用 cat 对 interactive() 进行测试可能就足够了。

标签: r rstudio


【解决方案1】:

您需要实际值/消息还是只是想显示进度?

如果是后者,txtProgressBar() 可能就足够了:

imax <- 2000
msg <- txtProgressBar(min=1, max=length(seq_len(imax)), initial=1)
for (i in seq_len(imax)) {
  setTxtProgressBar(msg, i)
  Sys.sleep(0.001) # so it will show something vs just fly through the loop
}
close(msg)

如果您需要这些值/消息并且可以不让它成为实际的诊断消息,那么cat 应该这样做:

imax <- 2000
for (i in seq_len(imax)) {
  mess <- sprintf("slightly different length message: %i", i)
  cat(paste(rep("\b", nchar(mess)), collapse = ""))
  cat(mess)
  if (i == imax) { cat("\n") }
  Sys.sleep(0.001) # again, loop is too fast to show w/o a delay
}

从原始提交中编辑/​​添加:

做了一些额外的测试,stderr 的输出导致了 RStudio 控制台区域的不同行为。当我直接调用.makeMessage 然后使用cat 输出到stdoutstderr 它可以工作:

imax <- 2000
for (i in seq_len(imax)) {
  mess <- sprintf("slightly different length message: %i", i)
  cat(.makeMessage(paste(rep("\b", nchar(mess)), collapse = ""), domain=NA, appendLF = FALSE))
  cat(.makeMessage(mess, domain=NA, appendLF = (i == imax)))
  Sys.sleep(0.001) # delay...see above snippets
  flush.console()
}

file=stderr() 添加到cat 中,它的行为方式与原始message 调用的方式相同。

【讨论】:

    【解决方案2】:

    你可以用cat\r,也就是

    cat("\r", "slightly different length message:", i)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2020-07-27
      • 2017-02-21
      相关资源
      最近更新 更多