素晴らしいことだ。 たとえば、プログレスバー内にプログレスバーがある場合...
このようなものがうまくいったらいいのにと思います:
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)
}
}
ええ、その通りです。
アクティブなプログレスバーのグローバルスタックを持つことができると思います。 1つのプログレスバーのみをサポートするディスプレイ(特にR Studio)では、一番上のプログレスバーのみを表示し、残りの概要を表示する可能性があります。 例:3つのレベル:
85% | 34% | 50% [====================--------------------] ETA 13s
適切なANSIサポートを備えた端末の場合、すべてのプログレスバー(最大10〜20)を一度に表示できます。
1行で3つまたは4つの同時プログレスバーをサポートできる1つの方法は、 Unicode点字パターンを使用することだと思います。
[⠿⠿⠟⠛⠛⠛⠒⠒⠒⠒ ]
@jimhesterは賢いですが、残念ながら非常に限られています。
私が作成した以下の関数は非常に粗雑ですが、なぜ以下のようなことができないのですか? プログレスのオプションを備えたプログレススタイルのパッケージに入れたいです。
データを再作成します。
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)}
関数:
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)
これは、すべてのR端末がANSIエスケープシーケンスをサポートしますが、残念ながら一部(特にデフォルトのWindows端末)ではサポートされていないため、 \r
でテキストの最後の行のみをクリアするように制限されています
完全なANSIエスケープシーケンスを使用するオプションを追加できますか?
または、プログレスバー間で水平方向のスペースを分割することもできます...
最も参考になるコメント
ええ、その通りです。
アクティブなプログレスバーのグローバルスタックを持つことができると思います。 1つのプログレスバーのみをサポートするディスプレイ(特にR Studio)では、一番上のプログレスバーのみを表示し、残りの概要を表示する可能性があります。 例:3つのレベル:
適切なANSIサポートを備えた端末の場合、すべてのプログレスバー(最大10〜20)を一度に表示できます。