library(rlang)
preserved_goods_none <- function(goods = c("cucumber", "lemon", "pear")) {
goods
}
preserved_goods_rlang <- function(goods = c("cucumber", "lemon", "pear")) {
goods <- rlang::arg_match(
arg = goods
)
goods
}
# this one is really fast but you need to specify `values` again
preserved_goods_rlang0 <- function(goods = c("cucumber", "lemon", "pear")) {
goods <- rlang::arg_match0(
arg = goods,
values = c("cucumber", "lemon", "pear")
)
goods
}
preserved_goods_base <- function(goods = c("cucumber", "lemon", "pear")) {
goods <- match.arg(
arg = goods
)
goods
}
# no error catching; also prints all default values
preserved_goods_none()
#> [1] "cucumber" "lemon" "pear"
preserved_goods_none(goods = "pear")
#> [1] "pear"
preserved_goods_none(goods = "apple")
#> [1] "apple"
# error catching, no partial matches, pretty printing
preserved_goods_rlang()
#> [1] "cucumber"
preserved_goods_rlang(goods = "pear")
#> [1] "pear"
preserved_goods_rlang(goods = "apple")
#> Error in `preserved_goods_rlang()`:
#> ! `goods` must be one of "cucumber", "lemon", or "pear", not "apple".
preserved_goods_rlang(goods = "pea")
#> Error in `preserved_goods_rlang()`:
#> ! `goods` must be one of "cucumber", "lemon", or "pear", not "pea".
#> ℹ Did you mean "pear"?
# error catching, partial matches, less-pretty printing
preserved_goods_base()
#> [1] "cucumber"
preserved_goods_base(goods = "pear")
#> [1] "pear"
preserved_goods_base(goods = "apple")
#> Error in match.arg(arg = goods): 'arg' should be one of "cucumber", "lemon", "pear"
preserved_goods_base(goods = "pea")
#> [1] "pear"
Created on 2025-03-17 with reprex v2.1.1
Session info
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.4.2 (2024-10-31)
#> os macOS Sequoia 15.1
#> system aarch64, darwin20
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz Australia/Hobart
#> date 2025-03-17
#> pandoc 3.2.1 @ /opt/homebrew/bin/ (via rmarkdown)
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> cli 3.6.4 2025-02-13 [1] CRAN (R 4.4.1)
#> digest 0.6.37 2024-08-19 [1] CRAN (R 4.4.1)
#> evaluate 1.0.1 2024-10-10 [1] CRAN (R 4.4.1)
#> fastmap 1.2.0 2024-05-15 [1] CRAN (R 4.4.0)
#> fs 1.6.5 2024-10-30 [1] CRAN (R 4.4.1)
#> glue 1.8.0 2024-09-30 [1] CRAN (R 4.4.1)
#> htmltools 0.5.8.1 2024-04-04 [1] CRAN (R 4.4.0)
#> knitr 1.49 2024-11-08 [1] CRAN (R 4.4.1)
#> lifecycle 1.0.4 2023-11-07 [1] CRAN (R 4.4.0)
#> pillar 1.10.1 2025-01-07 [1] CRAN (R 4.4.1)
#> reprex 2.1.1 2024-07-06 [1] CRAN (R 4.4.0)
#> rlang * 1.1.5 2025-01-17 [1] CRAN (R 4.4.1)
#> rmarkdown 2.29 2024-11-04 [1] CRAN (R 4.4.1)
#> rstudioapi 0.17.1 2024-10-22 [1] CRAN (R 4.4.1)
#> sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.4.0)
#> vctrs 0.6.5 2023-12-01 [1] CRAN (R 4.4.0)
#> withr 3.0.2 2024-10-28 [1] CRAN (R 4.4.1)
#> xfun 0.50.5 2025-01-15 [1] Github (yihui/xfun@116d689)
#> yaml 2.3.10 2024-07-26 [1] CRAN (R 4.4.0)
#>
#> [1] /Users/nick/Library/R/arm64/4.4/library
#> [2] /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/library
#>
#> ──────────────────────────────────────────────────────────────────────────────