Learn R Programming

purrr (version 0.2.1)

conditional-map: Modify elements conditionally

Description

map_if() maps a function over the elements of .x satisfying a predicate. map_at() is similar but will modify the elements corresponding to a character vector of names or a mumeric vector of positions.

Usage

map_if(.x, .p, .f, ...)

map_at(.x, .at, .f, ...)

Arguments

.x
A list or atomic vector.
.p
A single predicate function, a formula describing such a predicate function, or a logical vector of the same length as .x. Alternatively, if the elements of .x are themselves lists of objects, a string indicating the name of a lo
.f
A function, formula, or atomic vector.

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

...
Additional arguments passed on to .f.
.at
A character vector of names or a numeric vector of positions. Only those elements corresponding to .at will be modified.

Value

  • A list.

Examples

Run this code
# Convert factors to characters
iris %>%
  map_if(is.factor, as.character) %>%
  str()

# Specify which columns to map with a numeric vector of positions:
mtcars %>% map_at(c(1, 4, 5), as.character) %>% str()

# Or with a vector of names:
mtcars %>% map_at(c("cyl", "am"), as.character) %>% str()

list(x = rbernoulli(100), y = 1:100) %>%
  transpose() %>%
  map_if("x", ~ update_list(., y = ~ y * 100)) %>%
  transpose() %>%
  simplify_all()

Run the code above in your browser using DataLab