R: Match/validate a set of conditions for an object and continue...

when {purrr} | R Documentation

## Match/validate a set of conditions for an object and continue with the action associated with the first valid match.

### Description

`when` is a flavour of pattern matching (or an if-else abstraction) in which a value is matched against a sequence of condition-action sets. When a valid match/condition is found the action is executed and the result of the action is returned.

### Usage

    when(., ...)

### Arguments

`.` | the value to match agaist
`...` | formulas; each containing a condition as LHS and an action as RHS. named arguments will define additional values.

### Value

The value resulting from the action of the first valid match/condition is returned. If no matches are found, and no default is given, NULL will be returned.

Validity of the conditions are tested with `isTRUE`, or equivalently with `identical(condition, TRUE)`. In other words conditions resulting in more than one logical will never be valid. Note that the input value is always treated as a single object, as opposed to the `ifelse` function.

### Examples

    1:10 %>%
      when(
        sum(.) <=  50 ~ sum(.),
        sum(.) <= 100 ~ sum(.)/2,
        ~ 0
      )

    1:10 %>%
      when(
        sum(.) <=   x ~ sum(.),
        sum(.) <= 2*x ~ sum(.)/2,
        ~ 0,
        x = 60
      )

    iris %>%
      subset(Sepal.Length > 10) %>%
      when(
        nrow(.) > 0 ~ .,
        ~ iris %>% head(10)
      )

    iris %>%
      head %>%
      when(nrow(.) < 10 ~ .,
           ~ stop("Expected fewer than 10 rows."))

[Package purrr version 0.2.2 Index]