你是否需要實際的價值/信息,或者你只是想顯示進度?
如果是後者,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
}
編輯/添加從最初提交:
做了一些ADDIT離子測試,它的輸出爲stderr
,這導致了RStudio控制檯區域的不同行爲。當我打電話.makeMessage
直接再使用cat
與輸出要stdout
VS stderr
它的工作原理:
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
呼叫的方式做。
用'cat'代替'message'在RStudio中適用於我。當然,你需要刪除'appendLF'部分。 – Dason
是的,謝謝 - 希望避免貓()建成一個包。我不清楚這是否被皺起了眉頭(a la suppressMessages)。使用貓的交互式()測試可能就足夠了。 – mdsumner