Skip to contents

Checks if an argument is a valid list of symbols (e.g., created by exprs())

Usage

assert_vars(arg, expect_names = FALSE, optional = FALSE)

Arguments

arg

A function argument to be checked

expect_names

If the argument is set to TRUE, it is checked if all variables are named, e.g., exprs(APERSDT = APxxSDT, APEREDT = APxxEDT).

optional

Is the checked argument optional? If set to FALSE and arg is NULL then an error is thrown

Value

The function throws an error if arg is not a list of symbols (e.g., created by exprs() and returns the input invisibly otherwise.

Examples

library(dplyr, warn.conflicts = FALSE)
library(rlang)

example_fun <- function(by_vars) {
  assert_vars(by_vars)
}

example_fun(exprs(USUBJID, PARAMCD))

try(example_fun(quos(USUBJID, PARAMCD)))
#> Error in assert_list_of(arg, "symbol", named = expect_names, optional = optional) : 
#>   Each element of `arg` must be an object of class/type 'symbol' but the following are not:
#> ✖ Element 1 is an object of class 'quosure'
#> ✖ Element 2 is an object of class 'quosure'

try(example_fun(c("USUBJID", "PARAMCD", "VISIT")))
#> Error in assert_s3_class(arg, "list") : 
#>   `arg` must be an object of class 'list' but is a character vector

try(example_fun(exprs(USUBJID, toupper(PARAMCD), desc(AVAL))))
#> Error in assert_list_of(arg, "symbol", named = expect_names, optional = optional) : 
#>   Each element of `arg` must be an object of class/type 'symbol' but the following are not:
#> ✖ Element 2 is an object of class 'call'
#> ✖ Element 3 is an object of class 'call'

example_fun_name <- function(by_vars) {
  assert_vars(by_vars, expect_names = TRUE)
}

example_fun_name(exprs(APERSDT = APxxSDT, APEREDT = APxxEDT))

try(example_fun_name(exprs(APERSDT = APxxSDT, APxxEDT)))
#> Error in assert_list_of(arg, "symbol", named = expect_names, optional = optional) : 
#>   All elements of arg must be named.
#> The following elements are not named: 2