map()
iterate over multiple
arguments in parallel. map2
is specialised for the two argument
case; pmap
allows you to provide any number of arguments in a
list.
map2(.x, .y, .f, ...)
map2_lgl(.x, .y, .f, ...)
map2_int(.x, .y, .f, ...)
map2_dbl(.x, .y, .f, ...)
map2_chr(.x, .y, .f, ...)
map2_df(.x, .y, .f, ..., .id = NULL)
pmap(.l, .f, ...)
pmap_lgl(.l, .f, ...)
pmap_int(.l, .f, ...)
pmap_dbl(.l, .f, ...)
pmap_chr(.l, .f, ...)
pmap_df(.l, .f, ..., .id = NULL)
walk2(.x, .y, .f, ...)
pwalk(.l, .f, ...)
If a function, it is used as is.
If a formula, e.g. ~ .x + 2
, it is converted to a
function with two arguments, .x
or .
and .y
. This
allows you to create very compact anonymous functions with up to
two inputs.
If character or integer vector, e.g. "y"
, it
is converted to an extractor function, function(x) x[["y"]]
. To
index deeply into a nested list, use multiple values; c("x", "y")
is equivalent to z[["x"]][["y"]]
. You can also set .null
to set a default to use instead of NULL
for absent components.
.f
.NULL
a variable with this name will be created
giving either the name or the index of the data frame..l
determines the
number of arguments that .f
will be called with. List
names will be used if present..x
or the first
element of .l
is named.
.f
,
and arguments that are supplied to every call come after .f
.pmap()
and pwalk()
take a single list .l
and
map over all its elements in parallel.
x <- list(1, 10, 100)
y <- list(1, 2, 3)
map2(x, y, ~ .x + .y)
# Or just
map2(x, y, `+`)
# Split into pieces, fit model to each piece, then predict
by_cyl <- mtcars %>% split(.$cyl)
mods <- by_cyl %>% map(~ lm(mpg ~ wt, data = .))
map2(mods, by_cyl, predict)
Run the code above in your browser using DataLab