map_safely()
, map_quietly()
and map_peacefully()
are variants of
purrr::map()
that wrap the supplied function .f
using purrr::safely()
and/or purrr::quietly()
in order to capture various side effects. Lists
mapped in this way have an associated class added to them, allowing them to
succinctly summarise captured side effects when displayed in a tibble.
map_safely(.x, .f, otherwise = NULL, quiet = TRUE, ...) map_quietly(.x, .f, ...) map_peacefully(.x, .f, ...) map2_safely(.x, .y, .f, otherwise = NULL, quiet = TRUE, ...) map2_quietly(.x, .y, .f, ...) map2_peacefully(.x, .y, .f, ...) pmap_safely(.l, .f, otherwise = NULL, quiet = TRUE, ...) pmap_quietly(.l, .f, ...) pmap_peacefully(.l, .f, ...) future_map_safely(.x, .f, otherwise = NULL, quiet = TRUE, ...) future_map_quietly(.x, .f, ...) future_map_peacefully(.x, .f, ...) future_map2_safely(.x, .y, .f, otherwise = NULL, quiet = TRUE, ...) future_map2_quietly(.x, .y, .f, ...) future_map2_peacefully(.x, .y, .f, ...) future_pmap_safely(.l, .f, otherwise = NULL, quiet = TRUE, ...) future_pmap_quietly(.l, .f, ...) future_pmap_peacefully(.l, .f, ...)
.x | A list or atomic vector. |
---|---|
.f | A function, formula or atomic vector, as specified by
|
otherwise | Default value to use when an error occurs. |
quiet | Hide errors ( |
... | Other arguments supplied to |
.y | A list or atomic vector, of the same length as |
.l | A list of lists. The length of |
A list of the same length as .x
. Each element of the returned list
is itself a named list, structured according to the captured side effects.
The Details section elaborates on these side effects.
map_safely()
will summarise the returned list with a fixed-width
string of two (spaced) columns:
If a result
component is present, R
appears, and
If an error
component is present, E
appears.
If either component is missing, an underscore (_
) appears in its
place.
Similarly, map_quietly()
will summarise the returned list with a
fixed-width string of four (spaced) columns:
If a result
component is present, R
appears,
If an output
component is present, O
appears,
If a messages
component is present, M
appears, and
If a warnings
component is present, W
appears.
If any is missing, an underscore (_
) appears in its
place.
Variants for iterating over two or more inputs simultaneously
are also provided and function identically to their purrr
counterparts:
map2_safely()
map2_quietly()
pmap_safely()
pmap_quietly()
Further variants, prefixed by future_
, allow safe or quiet mapping to
happen in parallel if you have the furrr
package installed:
future_map_safely()
future_map_quietly()
future_map2_safely()
future_map2_quietly()
future_pmap_safely()
future_pmap_quietly()
#> #>#>#> #>#>#> #>library(tidyr) library(collateral) # like map(), these can be used to iterate over vectors or lists list("a", 10, 100) %>% map_safely(log)#> _ E #> R _ #> R _#> R _ _ _ #> R _ _ W #> R _ _ _# if you're using tibbles, you can also iterate over list-columns, # such as nested data frames mtcars %>% rownames_to_column(var = "car") %>% as_tibble() %>% select(car, cyl, disp, wt) %>% # spike some rows in cyl == 4 to make them fail mutate(wt = dplyr::case_when( wt < 2 ~ -wt, TRUE ~ wt)) %>% # nest and do some operations quietly() nest(data = -cyl) %>% mutate(qlog = map_quietly(data, ~ log(.$wt)))#> # A tibble: 3 x 3 #> cyl data qlog #> <dbl> <list> <collat> #> 1 6 <tibble [7 × 3]> R _ _ _ #> 2 4 <tibble [11 × 3]> R _ _ W #> 3 8 <tibble [14 × 3]> R _ _ _