# progressr: Map-Reduce Calls, e.g. lapply() and map()

Progress updates by progressr are designed to work out of the box for any iterator framework in R, e.g. `lapply()`, foreach, purrr, and plyr. Below you will find a set of examples that illustrate how to use progressr in common use cases.

## Base R apply functions

    library(progressr)
    handlers(global = TRUE)

    my_fcn <- function(xs) {
      p <- progressor(along = xs)
      lapply(xs, function(x) {
        Sys.sleep(0.1)
        p(sprintf("x=%g", x))
        sqrt(x)
      })
    }

    y <- my_fcn(1:10)
    #  |====================                               |  40%

## The foreach package

    library(foreach)
    library(progressr)
    handlers(global = TRUE)

    my_fcn <- function(xs) {
      p <- progressor(along = xs)
      foreach(x = xs) %do% {
        Sys.sleep(0.1)
        p(sprintf("x=%g", x))
        sqrt(x)
      }
    }

    y <- my_fcn(1:10)
    #  |====================                               |  40%

## The purrr package

    library(purrr)
    library(progressr)
    handlers(global = TRUE)

    my_fcn <- function(xs) {
      p <- progressor(along = xs)
      map(xs, function(x) {
        Sys.sleep(0.1)
        p(sprintf("x=%g", x))
        sqrt(x)
      })
    }

    y <- my_fcn(1:10)
    #  |====================                               |  40%

## The plyr package

    library(plyr)
    library(progressr)
    handlers(global = TRUE)

    my_fcn <- function(xs) {
      p <- progressor(along = xs)
      llply(xs, function(x, ...) {
        Sys.sleep(0.1)
        p(sprintf("x=%g", x))
        sqrt(x)
      })
    }

    y <- my_fcn(1:10)
    #  |====================                               |  40%

Note how this solution does not make use of plyr's `.progress` argument, because the above solution is more powerful and more flexible, e.g. we have more control over progress updates and their messages. However, if you prefer the traditional plyr approach, you can use `.progress = "progressr"`, e.g. `y <- llply(..., .progress = "progressr")`.