Progress: Múltiplas barras de progresso

Criado em 27 dez. 2015  ·  7Comentários  ·  Fonte: r-lib/progress

Seria ótimo. Por exemplo, se houver uma barra de progresso dentro de uma barra de progresso ...

Comentários muito úteis

Sim, exatamente.

Acho que podemos ter uma pilha global de barras de progresso ativas. Em monitores que suportam apenas uma barra de progresso, mais notavelmente R Studio, mostraríamos apenas a de cima e, potencialmente, mostraríamos um resumo para o resto. Por exemplo, para três níveis:

85% | 34% | 50% [====================--------------------] ETA 13s

Para terminais com suporte ANSI adequado, podemos mostrar todas as barras de progresso (bem, até 10-20) de uma vez.

Todos 7 comentários

Seria bom se algo assim funcionasse:

pb1 <- progress_bar$new(total = 100)
for(i in 1:100){
  pb1$tick()
  pb2 <- progress_bar$new(total = 100)  
  for(j in 1:100){
    pb2$tick()
    Sys.sleep(1/1000)
    }
}

Sim, exatamente.

Acho que podemos ter uma pilha global de barras de progresso ativas. Em monitores que suportam apenas uma barra de progresso, mais notavelmente R Studio, mostraríamos apenas a de cima e, potencialmente, mostraríamos um resumo para o resto. Por exemplo, para três níveis:

85% | 34% | 50% [====================--------------------] ETA 13s

Para terminais com suporte ANSI adequado, podemos mostrar todas as barras de progresso (bem, até 10-20) de uma vez.

Acho que uma maneira de oferecer suporte a 3 ou 4 barras de progresso simultâneas em uma linha é usando padrões de braille Unicode

[⠿⠿⠟⠛⠛⠛⠒⠒⠒⠒       ]

@jimhester que é inteligente, mas também muito limitado, infelizmente.

A função abaixo que eu construí é muito rudimentar, mas por que algo como abaixo não é possível? Eu adoraria tê-lo em um pacote de estilo de progresso com as opções de progresso.

Recrie os dados:

df <- data.frame(samplecol=c(1:50),
           file=c(1:50))
df$file <- paste0("file",df$file)

x <-function() {Sys.sleep(1/100)}
y <-function() {Sys.sleep(1/20)}

Função:

doubleProgressBar <- function(x, y) {
    for (i in 1:100) {
      x()
        for(j in 1:50){ 
          y()
          cat("\014")
          writeLines(c(paste0("OVERALL PROGRESS:", i,"%"," [",paste(rep("+",round((i/5))), collapse="")), 
                      paste0("FILE%: ",(j*2),"%"," CURRENTLY LOADING FILE: ",df[j,"file"], " [",paste(rep("+",round((j/2.5))), collapse=""))))
        }
      cat("\014")
      writeLines(c(paste0("OVERALL PROGRESS:", i,"%"," [",paste(rep("+",round((i/5))), collapse="")), 
                   paste0("FILE%: ",(j*2),"%"," CURRENTLY LOADING FILE: ",df[j,"file"], " [",paste(rep("+",round((j/2.5))), collapse=""))))
    }
}

###Does what I want, but with crude text entry. 
###Would be nice to have a package with nice entry have a double bar
doubleProgressBar(x,y)

Isso seria fácil de fazer se todos os terminais R suportassem a sequência de escape ANSI para mover o cursor linhas para cima, infelizmente alguns (principalmente o terminal padrão do Windows) não, então você está limitado a limpar apenas a última linha de texto com \r .

Você pode adicionar uma opção para usar sequências de escape ANSI completas?

Como alternativa, você pode dividir o espaço horizontal entre as barras de progresso ...

Esta página foi útil?
0 / 5 - 0 avaliações