我喜欢在我的脚本中使用它:
cat("Saving...")
do_something_slow()
cat("\rSaved\n")
问题是应用回车而不删除行的其余部分,所以我得到了这个:
Savedg...
要修复它,我可以这样做:
cat("\rSaved\033[K\n")
但这有点难看。有没有更简单的方法?
我喜欢在我的脚本中使用它:
cat("Saving...")
do_something_slow()
cat("\rSaved\n")
问题是应用回车而不删除行的其余部分,所以我得到了这个:
Savedg...
要修复它,我可以这样做:
cat("\rSaved\033[K\n")
但这有点难看。有没有更简单的方法?
我喜欢使用message()
而不是cat()
生成消息。例如:
cat("Saving..."); cat("\rSaved\n")
返回:
Savdg...
尽管:
message("Saving..."); message("\rSaved\n")
返回:
Saving...
Saved
编辑:
受@gauden 回答的启发,另一个功能可能是:
replaceMessage <- function(x, width = 80)
{
message("\r", rep(" ", times = width - length(x)), "\r", appendLF = F)
message(x, appendLF = F)
}
接着:
replaceMessage("Saving..."); Sys.sleep(1); replaceMessage("Saved\n")
笔记:
虽然replaceMessage()
在 Linux 和 Windows 上的 Rterm 中表现如预期,但在我的 Rgui(2.15.0,Windows x64)中表现很奇怪。具体来说,Saving...
从不显示,在Saved
显示之后,光标width
向右移动空格(本例中为 80 个空格)。我不确定为什么。
假设您希望消息全部连续显示在一行上,那么异想天开的东西怎么样?
cleancat <- function(astring, width=80) {
# Reserves a line of 80 (default) characters
# and uses it for serial updates
require("stringr")
astring <- paste("\r", astring, sep="")
cat(str_pad(astring, 80, "right"))
# pretend to do something slow
# delete this line if cleancat is used in production
Sys.sleep(0.5)
}
# imitate printing a series of updates
test <- lapply(c("Saving -",
"Saving \\",
"Saving |",
"Saving /",
"Saving -",
"Saving \\",
"Saving |",
"Saving /",
"Saved"), cleancat)
当然,您需要在您可能认为更丑陋的环境中加载stringr
包并设置功能......cleancat