keep: Keep or discard elements using a predicate function. In tidyverse/purrr: Functional Programming Tools

Description

`keep()` and `discard()` are opposites. `compact()` is a handy wrapper that removes all empty elements.

Usage

 ```1 2 3 4 5``` ```keep(.x, .p, ...) discard(.x, .p, ...) compact(.x, .p = identity) ```

Arguments

 `.x` A list or vector. `.p` For `keep()` and `discard()`, a predicate function. Only those elements where `.p` evaluates to `TRUE` will be kept or discarded. For `compact()`, a function that is applied to each element of `.x`. Only those elements where `.p` evaluates to an empty vector will be discarded. `...` Additional arguments passed on to `.p`.

Details

These are usually called `select` or `filter` and `reject` or `drop`, but those names are already taken. `keep()` is similar to `Filter()`, but the argument order is more convenient, and the evaluation of the predicate function `.p` is stricter.

Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19``` ```rep(10, 10) %>% map(sample, 5) %>% keep(function(x) mean(x) > 6) # Or use a formula rep(10, 10) %>% map(sample, 5) %>% keep(~ mean(.x) > 6) # Using a string instead of a function will select all list elements # where that subelement is TRUE x <- rerun(5, a = rbernoulli(1), b = sample(10)) x x %>% keep("a") x %>% discard("a") # compact() discards elements that are NULL or that have length zero list(a = "a", b = NULL, c = integer(0), d = NA, e = list()) %>% compact() ```

tidyverse/purrr documentation built on Jan. 11, 2019, 12:14 p.m.