/ / mostra un messaggio di stato in R - r, messaggio, stato, barra di stato

mostrando un messaggio di stato in R - r, messaggio, stato, barra di stato

Mi piacerebbe scrivere una funzione che presenta alutente un messaggio di stato che mostra qualcosa come il tempo, la percentuale di completamento e lo stato corrente di un processo. Posso gestire il montaggio del messaggio, ma mi piacerebbe fare qualcosa di diverso dalla semplice stampa sulla console e farlo scorrere verso l'alto, un messaggio dopo l'altro. Mi piacerebbe davvero che il messaggio cambiasse senza scorrere come message() e senza alcuna grafica. È possibile con R?

risposte:

24 per risposta № 1

Che ne dici di questo?

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 per risposta № 2

Il utils il pacchetto contiene il txtProgressBar e funzioni per l'aggiornamento che può essere utilizzato per mostrare la percentuale completa di un processo.

Vedere il up1, up2 e up3 funzioni che vengono create durante una chiamata a txtProgressBar per esempi di come vengono gestiti gli aggiornamenti senza scorrere la console.


15 per risposta № 3

Ecco alcuni 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


7 per risposta № 4

Ci possono essere modi più eleganti per farlo, ma questo potrebbe farlo:

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

}

Se si genera automaticamente il messaggio, è necessario calcolare quanti caratteri b devono essere stampati per eseguire il backup della quantità corretta, ma ciò è abbastanza semplice.