# Progress updates for 'future.apply' functions

The progressify package allows you to easily add progress reporting to sequential and parallel map-reduce code by piping to the `progressify()` function. Easy!

# TL;DR

    library(progressify)
    handlers(global = TRUE)
    library(future.apply)
    plan(multisession)

    slow_fcn <- function(x) {
      Sys.sleep(0.1)  # emulate work
      x^2
    }

    xs <- 1:100
    ys <- future_lapply(xs, slow_fcn) |> progressify()

# Introduction

This vignette demonstrates how to use this approach to add progress reporting to future.apply functions such as `future_lapply()`, `future_tapply()`, `future_apply()`, and `future_replicate()`.

The future.apply `future_lapply()` function is commonly used to apply a function to the elements of a vector or a list in parallel. For example,

    library(future.apply)
    plan(multisession)

    xs <- 1:100
    ys <- future_lapply(xs, slow_fcn)

Here `future_lapply()` provides no feedback on how far it has progressed, but we can easily add progress reporting by using:

    library(future.apply)
    plan(multisession)

    library(progressify)
    handlers(global = TRUE)

    ys <- future_lapply(xs, slow_fcn) |> progressify()

Using the default progress handler, the progress reporting will appear as:

      |=====                    |  20%

# Supported Functions

The `progressify()` function supports the following future.apply functions:

- `future_lapply()`, `future_vapply()`, `future_sapply()`, `future_tapply()`
- `future_mapply()`, `future_.mapply()`, `future_Map()`
- `future_eapply()`
- `future_apply()`
- `future_replicate()`
- `future_by()`