Skip to content

Instantly share code, notes, and snippets.

@njtierney
Last active March 17, 2025 06:56
Show Gist options
  • Save njtierney/5d6f78e3ac09ab180ece59430d648667 to your computer and use it in GitHub Desktop.
Save njtierney/5d6f78e3ac09ab180ece59430d648667 to your computer and use it in GitHub Desktop.
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
#> 
#> ──────────────────────────────────────────────────────────────────────────────
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment