Я хотел бы написать функцию, которая представляет пользователю сообщение о состоянии, которое показывает что-то вроде времени, процента завершения и текущего состояния процесса. Я могу обработать сборку сообщения, но я хотел бы сделать что-то другое, кроме как просто распечатать на консоли, и прокрутить вверх, одно сообщение за другим. Мне бы очень хотелось, чтобы сообщение изменилось без прокрутки, как message()
и без графики. Возможно ли это с R?
Показывая сообщение статуса в R
Ответ 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()
}
Ответ 2
Пакет utils
содержит txtProgressBar
и функции для его обновления, которые могут использоваться для отображения процента завершения процесса.
См. функции up1
, up2
и up3
, созданные во время вызова txtProgressBar
для примеров того, как обрабатываются обновления без прокрутки консоли.
Ответ 3
Вот несколько bling bling. От ?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)
Ответ 4
Могут быть более элегантные способы сделать это, но это может сделать это:
test.message <- function() {
for (i in 1:9){
cat(i)
Sys.sleep(1)
cat("\b")
}
}
Если вы автоматически генерируете свое сообщение, вам нужно будет вычислить, сколько символов \b выводится для резервного копирования правильной суммы, но это довольно просто.