purrr (version 0.2.2)

accumulate: Accumulate recursive folds across a list

Description

accumulate applies a function recursively over a list from the left, while accumulate_right applies the function from the right. Unlike reduce both functions keep the intermediate results.

Usage

accumulate(.x, .f, ..., .init)
accumulate_right(.x, .f, ..., .init)

Arguments

.x
A list or atomic vector.
.f
A two-argument function.
...
Additional arguments passed on to .f.
.init
If supplied, will be used as the first value to start the accumulation, rather than using x[[1]]. This is useful if you want to ensure that reduce returns the correct value when .x is is_empty().

Examples

Run this code
1:3 %>% accumulate(`+`)
1:10 %>% accumulate_right(`*`)

# From Haskell's scanl documentation
1:10 %>% accumulate(max, .init = 5)

# Simulating stochastic processes with drift
## Not run: 
# library(dplyr)
# library(ggplot2)
# 
# rerun(5, rnorm(100)) %>%
#   set_names(paste0("sim", 1:5)) %>%
#   map(~ accumulate(., ~ .05 + .x + .y)) %>%
#   map_df(~ data_frame(value = .x, step = 1:100), .id = "simulation") %>%
#   ggplot(aes(x = step, y = value)) +
#     geom_line(aes(color = simulation)) +
#     ggtitle("Simulations of a random walk with drift")
# ## End(Not run)

Run the code above in your browser using DataLab