If

Colin Fay

2018-01-31

if_ conditions

if_none, if_any and if_all test the elements of the list.

if_all(1:10, ~ .x < 11, ~ return(letters[1:10]))
#>  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

if_any(1:10, is.numeric, ~ print("Yay!"))
#> [1] "Yay!"

if_none(1:10, is.character, ~ rnorm(10))
#>  [1]  1.29671497 -0.66977683  0.60327837  0.28236087  1.56616041
#>  [6]  0.19191239 -0.20671717  0.92375538 -0.05068304 -0.30129752

The defaut for all .p is isTRUE. So you can:

a <- c(FALSE, TRUE, TRUE, TRUE)

if_any(a, .f = ~ print("nop!"))
#> [1] "nop!"

if_then performs a simple “if this then do that”:

if_then(1, is.numeric, ~ return("nop!"))
#> [1] "nop!"

if_not runs .f if .p(.x) is not TRUE :

if_not(.x = 1, .p = is.character, ~ ".x is not a character")
#> [1] ".x is not a character"

And if_else is a wrapper around base::ifelse() that works with mappers.

If you want these function to return a value, you need to wrap these values into a mapper / a function. E.g, to return a vector, you’ll need to write if_then(1, is.numeric, ~ "Yay").

a <- if_else(1, is.numeric, ~ return("Yay"), ~ return("Nay"))
a
#> [1] "Yay"