incase v0.1.0
Monthly downloads
Pipe-Friendly Vector Replacement with Case Statements
Offers a pipe-friendly alternative to the 'dplyr'
functions case_when() and if_else(). These functions accept a vector
as an optional first argument, allowing conditional statements to be
built using the 'magrittr' dot operator. The functions also coerce
all possible outputs to the same type, meaning you no longer have to
worry about using specific typed variants of NA or explicitly
declaring integer outputs.
Readme
incase 
incase provides a more pipe-friendly alternative to
dplyr’s
case_when()
and if_else()
.
Installation
You can install the development version of incase from GitHub with:
# install.packages("remotes")
remotes::install_github("rossellhayes/incase")
Usage
Pipe-friendly conditionals
incase’s in_case()
and if_case()
accept a vector as their first
input, allowing you to take full advantage of
magrittr’s .
1:20 %>%
in_case(
. %% 15 == 0 ~ "fizz buzz",
. %% 3 == 0 ~ "fizz",
. %% 5 == 0 ~ "buzz",
TRUE ~ .
)
#> [1] "1" "2" "fizz" "4" "buzz" "fizz"
#> [7] "7" "8" "fizz" "buzz" "11" "fizz"
#> [13] "13" "14" "fizz buzz" "16" "17" "fizz"
#> [19] "19" "buzz"
1:20 %>% if_case(. %% 3 == 0, "fizz", .)
#> [1] "1" "2" "fizz" "4" "5" "fizz" "7" "8" "fizz" "10"
#> [11] "11" "fizz" "13" "14" "fizz" "16" "17" "fizz" "19" "20"
Automatic type conversion
incase functions automatically coerce types. This is especially
useful when dealing with integers or NA
s.
x <- -1:5
# Replace -1 with NA
dplyr::case_when(x == -1 ~ NA, TRUE ~ x)
#> Error: must be a logical vector, not an integer vector.
dplyr::case_when(x == -1 ~ NA_integer_, TRUE ~ x)
#> [1] NA 0 1 2 3 4 5
in_case(x == -1 ~ NA, TRUE ~ x)
#> [1] NA 0 1 2 3 4 5
# Replace -1 with 0
dplyr::case_when(x == -1 ~ 0, TRUE ~ x)
#> Error: must be a double vector, not an integer vector.
dplyr::case_when(x == -1 ~ 0L, TRUE ~ x)
#> [1] 0 0 1 2 3 4 5
in_case(x == -1 ~ 0, TRUE ~ x)
#> [1] 0 0 1 2 3 4 5
With incase, you no longer have to worry about specifying the type
of your NA
s or adding L
to your integers.
Easy default values
in_case()
adds preserve
and default
arguments as a more intuitive
alternative to TRUE ~ ...
.*
1:20 %>%
in_case(
. %% 15 == 0 ~ "fizz buzz",
. %% 3 == 0 ~ "fizz",
. %% 5 == 0 ~ "buzz"
)
#> [1] NA NA "fizz" NA "buzz" "fizz"
#> [7] NA NA "fizz" "buzz" NA "fizz"
#> [13] NA NA "fizz buzz" NA NA "fizz"
#> [19] NA "buzz"
1:20 %>%
in_case(
. %% 15 == 0 ~ "fizz buzz",
. %% 3 == 0 ~ "fizz",
. %% 5 == 0 ~ "buzz",
preserve = TRUE
)
#> [1] "1" "2" "fizz" "4" "buzz" "fizz"
#> [7] "7" "8" "fizz" "buzz" "11" "fizz"
#> [13] "13" "14" "fizz buzz" "16" "17" "fizz"
#> [19] "19" "buzz"
1:20 %>%
in_case(
. %% 15 == 0 ~ "fizz buzz",
. %% 3 == 0 ~ "fizz",
. %% 5 == 0 ~ "buzz",
default = "pass"
)
#> [1] "pass" "pass" "fizz" "pass" "buzz" "fizz"
#> [7] "pass" "pass" "fizz" "buzz" "pass" "fizz"
#> [13] "pass" "pass" "fizz buzz" "pass" "pass" "fizz"
#> [19] "pass" "buzz"
Simplified interface for recoding
switch_case()
works as a convenient shorthand for in_case()
when
recoding discrete values.
parties
#> [1] "D" "R" "I" "L" "D" "D" "D" NA "R" "D" "G" "I" NA NA "I" "I" "D" "I" "D"
#> [20] "D"
parties %>%
in_case(
. == "D" ~ "Democratic",
. == "R" ~ "Republican",
. %in% c("G", "L") ~ "Other",
. %in% c("I", NA) ~ "Independent"
)
#> [1] "Democratic" "Republican" "Independent" "Other" "Democratic"
#> [6] "Democratic" "Democratic" "Independent" "Republican" "Democratic"
#> [11] "Other" "Independent" "Independent" "Independent" "Independent"
#> [16] "Independent" "Democratic" "Independent" "Democratic" "Democratic"
parties %>%
switch_case(
"D" ~ "Democrat",
"R" ~ "Republican",
c("G", "L") ~ "Other",
c("I", NA) ~ "Independent"
)
#> [1] "Democrat" "Republican" "Independent" "Other" "Democrat"
#> [6] "Democrat" "Democrat" "Independent" "Republican" "Democrat"
#> [11] "Other" "Independent" "Independent" "Independent" "Independent"
#> [16] "Independent" "Democrat" "Independent" "Democrat" "Democrat"
Hex sticker fonts are Source Code Pro by Adobe and Hasklig by Ian Tuomi.
Please note that incase is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
* Intuitiveness may vary from person to person.
Functions in incase
Name | Description | |
if_case | Pipe-friendly vectorized if | |
%>% | Pipe operator | |
switch_case | Switch-style recoding of values | |
in_case | A pipe-friendly general vectorized if | |
incase-package | incase: Pipe-Friendly Vector Replacement with Case Statements | |
No Results! |
Last month downloads
Details
Type | Package |
License | MIT + file LICENSE |
URL | https://incase.rossellhayes.com, https://github.com/rossellhayes/incase |
BugReports | https://github.com/rossellhayes/incase/issues |
Encoding | UTF-8 |
LazyData | true |
RoxygenNote | 7.1.1 |
NeedsCompilation | no |
Packaged | 2020-09-08 01:46:48 UTC; Alex |
Repository | CRAN |
Date/Publication | 2020-09-15 10:00:06 UTC |
Include our badge in your README
[](http://www.rdocumentation.org/packages/incase)