Learn R Programming

base (version 3.6.2)

match.call: Argument Matching

Description

match.call returns a call in which all of the specified arguments are specified by their full names.

Usage

match.call(definition = sys.function(sys.parent()),
           call = sys.call(sys.parent()),
           expand.dots = TRUE,
           envir = parent.frame(2L))

Arguments

definition

a function, by default the function from which match.call is called. See details.

call

an unevaluated call to the function specified by definition, as generated by call.

expand.dots

logical. Should arguments matching … in the call be included or left as a … argument?

envir

an environment, from which the … in call are retrieved, if any.

Value

An object of class call.

Details

‘function’ on this help page means an interpreted function (also known as a ‘closure’): match.call does not support primitive functions (where argument matching is normally positional).

match.call is most commonly used in two circumstances:

  • To record the call for later re-use: for example most model-fitting functions record the call as element call of the list they return. Here the default expand.dots = TRUE is appropriate.

  • To pass most of the call to another function, often model.frame. Here the common idiom is that expand.dots = FALSE is used, and the … element of the matched call is removed. An alternative is to explicitly select the arguments to be passed on, as is done in lm.

Calling match.call outside a function without specifying definition is an error.

References

Chambers, J. M. (1998) Programming with Data. A Guide to the S Language. Springer.

See Also

sys.call() is similar, but does not expand the argument names; call, pmatch, match.arg, match.fun.

Examples

Run this code
# NOT RUN {
match.call(get, call("get", "abc", i = FALSE, p = 3))
## -> get(x = "abc", pos = 3, inherits = FALSE)
fun <- function(x, lower = 0, upper = 1) {
  structure((x - lower) / (upper - lower), CALL = match.call())
}
fun(4 * atan(1), u = pi)
# }

Run the code above in your browser using DataLab