
Last chance! 50% off unlimited learning
Sale ends in
If you are working with a user-supplied call, make sure the
arguments are standardised with call_match()
before
modifying the call.
call_modify(
.call,
...,
.homonyms = c("keep", "first", "last", "error"),
.standardise = NULL,
.env = caller_env()
)
A quosure if .call
is a quosure, a call otherwise.
Can be a call, a formula quoting a call in the right-hand side, or a frame object from which to extract the call expression.
<dynamic> Named or unnamed expressions
(constants, names or calls) used to modify the call. Use zap()
to remove arguments. Empty arguments are preserved.
How to treat arguments with the same name. The
default, "keep"
, preserves these arguments. Set .homonyms
to
"first"
to only keep the first occurrences, to "last"
to keep
the last occurrences, and to "error"
to raise an informative
error and indicate what arguments have duplicated names.
Deprecated as of rlang 0.3.0. Please
call call_match()
manually.
call <- quote(mean(x, na.rm = TRUE))
# Modify an existing argument
call_modify(call, na.rm = FALSE)
call_modify(call, x = quote(y))
# Remove an argument
call_modify(call, na.rm = zap())
# Add a new argument
call_modify(call, trim = 0.1)
# Add an explicit missing argument:
call_modify(call, na.rm = )
# Supply a list of new arguments with `!!!`
newargs <- list(na.rm = NULL, trim = 0.1)
call <- call_modify(call, !!!newargs)
call
# Remove multiple arguments by splicing zaps:
newargs <- rep_named(c("na.rm", "trim"), list(zap()))
call <- call_modify(call, !!!newargs)
call
# Modify the `...` arguments as if it were a named argument:
call <- call_modify(call, ... = )
call
call <- call_modify(call, ... = zap())
call
# When you're working with a user-supplied call, standardise it
# beforehand in case it includes unmatched arguments:
user_call <- quote(matrix(x, nc = 3))
call_modify(user_call, ncol = 1)
# `call_match()` applies R's argument matching rules. Matching
# ensures you're modifying the intended argument.
user_call <- call_match(user_call, matrix)
user_call
call_modify(user_call, ncol = 1)
# By default, arguments with the same name are kept. This has
# subtle implications, for instance you can move an argument to
# last position by removing it and remapping it:
call <- quote(foo(bar = , baz))
call_modify(call, bar = NULL, bar = missing_arg())
# You can also choose to keep only the first or last homonym
# arguments:
args <- list(bar = NULL, bar = missing_arg())
call_modify(call, !!!args, .homonyms = "first")
call_modify(call, !!!args, .homonyms = "last")
Run the code above in your browser using DataLab