purrr 1.0.2

purrr 1.0.1

purrr 1.0.0

Breaking changes

Core purpose refinements


Deprecation next steps

New features

Flattening and simplification

Tidyverse consistency


Setting with NULL

list_ functions

Minor improvements and bug fixes

purrr 0.3.5

purrr 0.3.4

purrr 0.3.3

purrr 0.3.2

purrr 0.3.1

purrr 0.3.0

Breaking changes





The interface of partial() has been simplified. It now supports quasiquotation to control the timing of evaluation, and the rlang::call_modify() syntax to control the position of partialised arguments.

Minor improvements and fixes

Life cycle

.dir arguments

We have standardised the purrr API for reverse iteration with a common .dir argument.

Simplification of partial()

The interface of partial() has been simplified (see more about partial() below):

Retirement of invoke()

invoke() and invoke_map() are retired in favour of exec(). Note that retired functions are no longer under active development, but continue to be maintained undefinitely in the package.

Other lifecycle changes

purrr 0.2.5

purrr 0.2.4

purrr 0.2.3

Breaking changes

We noticed the following issues during reverse dependencies checks:


purrr no longer depends on lazyeval or Rcpp (or dplyr, as of the previous version). This makes the dependency graph of the tidyverse simpler, and makes purrr more suitable as a dependency of lower-level packages.

There have also been two changes to eliminate name conflicts between purrr and dplyr:


The plucking mechanism used for indexing into data structures with map() has been extracted into the function pluck(). Plucking is often more readable to extract an element buried in a deep data structure. Compare this syntax-heavy extraction which reads non-linearly:


to the equivalent pluck:

x %>% pluck(1, accessor, "foo")

Map helpers

Map functions

Modify functions

A new modify() family returns the same output of the type as the input .x. This is in contrast to the map() family which always returns a list, regardless of the input type.

The modify functions are S3 generics. However their default methods should be sufficient for most classes since they rely on the semantics of [<-. modify.default() is thus a shorthand for x[] <- map(x, f).

New functions

Minor improvements and bug fixes


This is a compatibility release with dplyr 0.6.0.

purrr 0.2.2

purrr 0.2.1

purrr 0.2.0

New functions

Row based functionals

We are still figuring out what belongs in dplyr and what belongs in purrr. Expect much experimentation and many changes with these functions.

Bug fixes and minor changes

Deprecated functions