R: Find the value or position of the first match.

detect {purrr} | R Documentation

## Find the value or position of the first match.

### Description

Find the value or position of the first match.

### Usage

    detect(.x, .f, ..., .right = FALSE, .p)

    detect_index(.x, .f, ..., .right = FALSE, .p)

### Arguments

`.x` | A list or atomic vector.
`.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. There are three ways to refer to the arguments: For a single argument function, use `.` For a two argument function, use `.x` and `.y` For more arguments, use `..1`, `..2`, `..3` etc This syntax allows you to create very compact anonymous functions. If character vector, numeric vector, or list, it is converted to an extractor function. Character vectors index by name and numeric vectors index by position; use a list to index by position and name at different levels. Within a list, wrap strings in `get-attr()` to extract named attributes. If a component is not present, the value of `.default` will be returned.
`...` | Additional arguments passed on to `.f`.
`.right` | If `FALSE`, the default, starts at the beginning of the vector and move towards the end; if `TRUE`, starts at the end of the vector and moves towards the beginning.
`.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 logical element in the inner lists. Only those elements where `.p` evaluates to `TRUE` will be modified.

### Value

`detect` the value of the first item that matches the predicate; `detect_index` the position of the matching item. If not found, `detect` returns `NULL` and `detect_index` returns 0.

### Examples

    is_even <- function(x) x %% 2 == 0

    3:10 %>% detect(is_even)
    3:10 %>% detect_index(is_even)

    3:10 %>% detect(is_even, .right = TRUE)
    3:10 %>% detect_index(is_even, .right = TRUE)

    # Since `.f` is passed to as_mapper(), you can supply a
    # lambda-formula or a pluck object:
    x <- list(
      list(1, foo = FALSE),
      list(2, foo = TRUE),
      list(3, foo = TRUE)
    )

    detect(x, "foo")
    detect_index(x, "foo")

[Package purrr version 0.2.4 Index]