Подтвердить что ты не робот

Показывая сообщение статуса в R

Я хотел бы написать функцию, которая представляет пользователю сообщение о состоянии, которое показывает что-то вроде времени, процента завершения и текущего состояния процесса. Я могу обработать сборку сообщения, но я хотел бы сделать что-то другое, кроме как просто распечатать на консоли, и прокрутить вверх, одно сообщение за другим. Мне бы очень хотелось, чтобы сообщение изменилось без прокрутки, как message() и без графики. Возможно ли это с R?

4b9b3361

Ответ 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)

alt text

Ответ 4

Могут быть более элегантные способы сделать это, но это может сделать это:

test.message <- function() {
  for (i in 1:9){
    cat(i)
    Sys.sleep(1)
    cat("\b")
  }

}

Если вы автоматически генерируете свое сообщение, вам нужно будет вычислить, сколько символов \b выводится для резервного копирования правильной суммы, но это довольно просто.