4

我经常将以下内容添加到循环中以打印出每次迭代的一些消息。

for (word in c("a", "long message", "c")) {
  cat("\r", word)
  flush.console()
  Sys.sleep(1)
}

在此处输入图像描述

如我们所见,该消息"c"仅覆盖了前一个"long message". 我想避免这种情况。我唯一能想到的是添加额外的空白,例如

for (word in c("a", "long message", "c")) {
  cat("\r", word, "                ")
  flush.console()
  Sys.sleep(1)
}

回车后是否有更好的方法来获取干净的消息?请注意,我不想要换行符。

更新:@user1981275 发布了一个已确认可在 Linux 上运行的解决方案。仍然需要独立于平台的解决方案。

4

1 回答 1

1

ANSI Erase to end of line转义序列\033[K可以与cat(参见例如here)一起使用:

for (word in c("a", "long message", "c")) {
  cat("\r", "\033[K", word)
  flush.console()
  Sys.sleep(1)
}
于 2019-01-15T09:50:40.617 回答