Match arg against a series of candidate choices. arg matches an
element of choices if arg is a prefix of that element.
str_match_arg(
arg,
choices = NULL,
index = FALSE,
several_ok = FALSE,
ignore_case = FALSE
)
match_arg(
arg,
choices = NULL,
index = FALSE,
several_ok = FALSE,
ignore_case = FALSE
)A character vector (of length one unless several_ok = TRUE).
A character vector of candidate values.
Return the index of the match rather than the match itself?
Allow arg to have length greater than one to match
several arguments at once?
Ignore case while matching. If this is TRUE, the
returned value is the matched element of choices (with its original
casing).
ERRORs are thrown when a match is not made and where the match is
ambiguous. However, sometimes ambiguities are inevitable. Consider the case
where choices = c("ab", "abc"), then there's no way to choose "ab"
because "ab" is a prefix for "ab" and "abc". If this is the case, you
need to provide a full match, i.e. using arg = "ab" will get you "ab"
without an error, however arg = "a" will throw an ambiguity error.
When choices is NULL, the choices are obtained from a default setting
for the formal argument arg of the function from which str_match_arg was
called. This is consistent with base::match.arg(). See the examples for
details.
When arg and choices are identical and several_ok = FALSE, the first
element of choices is returned. This is consistent with
base::match.arg().
This function inspired by RSAGA::match.arg.ext(). Its behaviour is almost
identical (the difference is that RSAGA::match.arg.ext(..., ignore.case = TRUE) always returns in all lower case; strex::match_arg(..., ignore_case = TRUE) ignores case while matching but returns the element of choices in
its original case). RSAGA is a heavy package to depend upon so
strex::match_arg() is handy for package developers.
This function is designed to be used inside of other functions. It's fine to use it for other purposes, but the error messages might be a bit weird.
choices <- c("Apples", "Pears", "Bananas", "Oranges")
match_arg("A", choices)
#> [1] "Apples"
match_arg("B", choices, index = TRUE)
#> [1] 3
match_arg(c("a", "b"), choices, several_ok = TRUE, ignore_case = TRUE)
#> [1] "Apples" "Bananas"
match_arg(c("b", "a"), choices,
ignore_case = TRUE, index = TRUE,
several_ok = TRUE
)
#> [1] 3 1
myword <- function(w = c("abacus", "baseball", "candy")) {
w <- match_arg(w)
w
}
myword("b")
#> [1] "baseball"
myword()
#> [1] "abacus"
myword <- function(w = c("abacus", "baseball", "candy")) {
w <- match_arg(w, several_ok = TRUE)
w
}
myword("c")
#> [1] "candy"
myword()
#> [1] "abacus" "baseball" "candy"