отображение сообщения о состоянии в R - PullRequest
30 голосов
/ 21 января 2011

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

Ответы [ 4 ]

26 голосов
/ 21 января 2011

Как насчет этого?

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()
}
17 голосов
/ 21 января 2011

Пакет utils содержит txtProgressBar и функции для его обновления, которые можно использовать для отображения процента завершения процесса.

См. Функции up1, up2 и up3, созданные во время вызова txtProgressBar, для примеров того, как обновления обрабатываются без прокрутки консоли.

15 голосов
/ 21 января 2011

Вот немного побрякушки. От ?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

7 голосов
/ 21 января 2011

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

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

}

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

...