Learn R Programming

progress (version 1.1.1)

progress_bar: Progress bar in the terminal

Description

Progress bars are configurable, may include percentage, elapsed time, and/or the estimated completion time. They work in the command line, in Emacs and in R Studio. The progress package was heavily influenced by https://github.com/tj/node-progress

Arguments

Creating the progress bar

A progress bar is an R6 object, that can be created with progress_bar$new(). It has the following arguments:

Using the progress bar

Two functions can update a progress bar. progress_bar$tick() increases the number of ticks by one (or another specified value). progress_bar$update() sets a given ratio. The progress bar is displayed after the first `tick` command. This might not be desirable for long computations, because nothing is shown before the first tick. It is good practice to call `tick(0)` at the beginning of the computation or download, which shows the progress bar immediately.

Tokens

They can be used in the format argument when creating the progress bar.
Custom tokens are also supported, and you need to pass their values to progress_bar$tick() or progress_bar$update(), in a named list. See example below.

Examples

Run this code

## We don't run the examples on CRAN, because they takes >10s
## altogether. Unfortunately it is hard to create a set of
## meaningful progress bar examples that also run quickly.
## Not run: 
# 
# ## Basic
# pb <- progress_bar$new(total = 100)
# for (i in 1:100) {
#   pb$tick()
#   Sys.sleep(1 / 100)
# }
# 
# ## ETA
# pb <- progress_bar$new(
#   format = "  downloading [:bar] :percent eta: :eta",
#   total = 100, clear = FALSE, width= 60)
# for (i in 1:100) {
#   pb$tick()
#   Sys.sleep(1 / 100)
# }
# 
# ## Elapsed time
# pb <- progress_bar$new(
#   format = "  downloading [:bar] :percent in :elapsed",
#   total = 100, clear = FALSE, width= 60)
# for (i in 1:100) {
#   pb$tick()
#   Sys.sleep(1 / 100)
# }
# 
# ## Spinner
# pb <- progress_bar$new(
#   format = "(:spin) [:bar] :percent",
#   total = 30, clear = FALSE, width = 60)
# for (i in 1:30) {
#   pb$tick()
#   Sys.sleep(3 / 100)
# }
# 
# ## Custom tokens
# pb <- progress_bar$new(
#   format = "  downloading :what [:bar] :percent eta: :eta",
#   clear = FALSE, total = 200, width = 60)
# f <- function() {
#   for (i in 1:100) {
#     pb$tick(tokens = list(what = "foo   "))
#     Sys.sleep(2 / 100)
#   }
#   for (i in 1:100) {
#     pb$tick(tokens = list(what = "foobar"))
#     Sys.sleep(2 / 100)
#   }
# }
# f()
# 
# ## Download (or other) rates
# pb <- progress_bar$new(
#   format = "  downloading foobar at :rate, got :bytes in :elapsed",
#   clear = FALSE, total = 1e7, width = 60)
# f <- function() {
#   for (i in 1:100) {
#     pb$tick(sample(1:100 * 1000, 1))
#     Sys.sleep(2/100)
#   }
#   pb$tick(1e7)
#   invisible()
# }
# f()
# 
# ## End(Not run)

Run the code above in your browser using DataLab