Description Usage Arguments Details Value Examples
Similar to match.call
, but is designed specifically to match
calls at varying depts from the dynamic call stack. Which call is matched
is controlled by the n
argument, which is analgous to the n
argument for sys.parent
. match_call
also addresses some
potentially unexpected behavior with match.call
with calls
involving dots (...
) in corner cases.
1 2 |
n |
integer(1L) how many frames to look up the call stack, analogous to
the |
dots |
character(1L) "exclude": do not include dots, "include": include them, "expand": include and expand (note last two only include dots if there are actually args matched by dots) |
default.formals |
set to TRUE to include formals not specified in call
though under no circumstances will it return ellipses even if you do
something like |
empty.formals |
set to TRUE to include formals that were not specified and do not have default values |
user.formals |
set to FALSE if you want to exclude arguments that the user specified; this should almost never be needed unless you specifically want to know what arguments are using default values (in which case you also be setting default.formals to TRUE) |
definition |
same as |
You can also use match.call
to match arbitrary calls from the
call stack, but it is simpler to do so using match_call
, particularly
when the call stack and the lexical stack are not the same. See examples
for illustration of differences between match.call
and
match_call
.
match_call
will also include unspecified defaults and missing
arguments if requested (see default.formals
and empty.formals
).
For a more detailed discussion of the exact nature of the dots corner case
issues with match.call
, see the vignette. Briefly: these crop up when
there are multiple calls using dots involved.
the parent call that led to the invocation of match_call()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # Compare `match.call` and `match_call`
fun1 <- function(a, b) {
cat("**Matching Parent Call**\n")
print(match.call())
print(match_call())
cat("\n**Matching Grand-Parent Call**\n")
print(match.call(call=sys.call(sys.parent())))
print(match_call(2))
}
fun2 <- function(c, d) fun1(a + 1, b - 1)
fun2(25, pi() + 3)
# Recover default formals
fun <- function(a, b, c=TRUE, ...) {
match_call(default.formals=TRUE, dots="include")
}
fun(5, 6, x=list(1:10, FALSE))
# If Dynamic and Lexical Stacks not the same, we need to use `definition`
# param to `match.call`; `match_call` on the other hand works just fine
fun3a <- function(x) fun4a()
fun4a <- function() match_call(2)
fun3b <- function(x) fun4b() # Note: fun4b defined outside fun3b
fun4b <- function() match.call(definition=fun3b, call=sys.call(sys.parent()))
fun3a(1 + 1) # `match_call` works
fun3b(1 + 1) # `match.call` also works, but only if we explicitly specify `definition`
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.