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 _ _ _