Skip to content

These selection helpers select variables contained in a character vector. They are especially useful for programming with selecting functions.

  • all_of() is for strict selection. If any of the variables in the character vector is missing, an error is thrown.

  • any_of() doesn't check for missing variables. It is especially useful with negative selections, when you would like to make sure a variable is removed.

The order of selected columns is determined by the order in the vector.

Usage

all_of(x)

any_of(x, ..., vars = NULL)

Arguments

x

A vector of character names or numeric locations.

...

These dots are for future extensions and must be empty.

vars

A character vector of variable names. If not supplied, the variables are taken from the current selection context (as established by functions like select() or pivot_longer()).

Examples

Selection helpers can be used in functions like dplyr::select() or tidyr::pivot_longer(). Let's first attach the tidyverse:

library(tidyverse)

# For better printing
iris <- as_tibble(iris)

It is a common to have a names of variables in a vector.

vars <- c("Sepal.Length", "Sepal.Width")

iris[, vars]
#> # A tibble: 150 x 2
#>   Sepal.Length Sepal.Width
#>          <dbl>       <dbl>
#> 1          5.1         3.5
#> 2          4.9         3
#> 3          4.7         3.2
#> 4          4.6         3.1
#> # i 146 more rows

To refer to these variables in selecting function, use all_of():

iris %>% select(all_of(vars))
#> # A tibble: 150 x 2
#>   Sepal.Length Sepal.Width
#>          <dbl>       <dbl>
#> 1          5.1         3.5
#> 2          4.9         3
#> 3          4.7         3.2
#> 4          4.6         3.1
#> # i 146 more rows

iris %>% pivot_longer(all_of(vars))
#> # A tibble: 300 x 5
#>   Petal.Length Petal.Width Species name         value
#>          <dbl>       <dbl> <fct>   <chr>        <dbl>
#> 1          1.4         0.2 setosa  Sepal.Length   5.1
#> 2          1.4         0.2 setosa  Sepal.Width    3.5
#> 3          1.4         0.2 setosa  Sepal.Length   4.9
#> 4          1.4         0.2 setosa  Sepal.Width    3
#> # i 296 more rows

If any of these variables are missing from the data frame, that's an error:

starwars %>% select(all_of(vars))
#> Error:
#> i In argument: `all_of(vars)`.
#> Caused by error in `all_of()`:
#> ! Can't subset elements that don't exist.
#> x Elements `Sepal.Length` and `Sepal.Width` don't exist.

Use any_of() to allow missing variables:

starwars %>% select(any_of(vars))
#> # A tibble: 87 x 0

any_of() is especially useful to remove variables from a data frame because calling it again does not cause an error:

iris %>% select(-any_of(vars))
#> # A tibble: 150 x 3
#>   Petal.Length Petal.Width Species
#>          <dbl>       <dbl> <fct>
#> 1          1.4         0.2 setosa
#> 2          1.4         0.2 setosa
#> 3          1.3         0.2 setosa
#> 4          1.5         0.2 setosa
#> # i 146 more rows

iris %>% select(-any_of(vars)) %>% select(-any_of(vars))
#> # A tibble: 150 x 3
#>   Petal.Length Petal.Width Species
#>          <dbl>       <dbl> <fct>
#> 1          1.4         0.2 setosa
#> 2          1.4         0.2 setosa
#> 3          1.3         0.2 setosa
#> 4          1.5         0.2 setosa
#> # i 146 more rows

Supply named vectors to all_of() and any_of() to select and rename columns at the same time:

colors <- c(color_of_hair = "hair_color", color_of_eyes = "eye_color")
starwars %>% select(all_of(colors))
#> # A tibble: 87 x 2
#>   color_of_hair color_of_eyes
#>   <chr>         <chr>
#> 1 blond         blue
#> 2 <NA>          yellow
#> 3 <NA>          red
#> 4 none          yellow
#> # i 83 more rows

See also

The selection language page, which includes links to other selection helpers.