Skip to contents

When compiling (“knitting”) an knitr-based vignette, for instance, via knitr::knit(), knitr shows the progress of code chunks processed thus far using a progress bar. We can use progressr also for this type of progress reporting. To have knitr report on progress via progressr, set R option knitr.progress.fun as:

options(knitr.progress.fun = function(total, labels) {
  p <- progressr::progressor(total, on_exit = FALSE)
  list(
    update = function(i) p(sprintf("chunk: %s", labels[i])),
    done = function() p(type = "finish")
  )
})

That’s it! With the above knitr.progress.fun option set, try to knit a document, e.g.

progressr::handlers(global = TRUE)
infile <- system.file("examples", "knitr-minimal.Rnw", package = "knitr")
outfile <- knitr::knit(infile)

To customize the progress bar, try for instance:

progressr::handlers(global = TRUE)
options(crayon.enabled = TRUE)  ## force use of colors
progressr::handlers("pbcol")

This will produce a colored progress bar in the terminal.

Comment: If the above knit example completes too quickly for you to see the progress updates, you can add the “slowdown” handler to slow down the knitting process, e.g.

progressr::handlers(c("pbcol", "slowdown"))

This will add the overall process to take at least ten seconds (default).

To make knitr report via progressr in all your R session, set the above R option in your ~/.Rprofile startup file, e.g.

if (requireNamespace("progressr", quietly = TRUE)) {
  options(knitr.progress.fun = function(total, labels) {
    p <- progressr::progressor(total, on_exit = FALSE)
    list(
      update = function(i) p(sprintf("chunk: %s", labels[i])),
      done = function() p(type = "finish")
    )
  })
}