В теле некоторых R-функций, например lm
, я вижу вызовы функции match.call
. Как говорится на странице справки, при использовании внутри функции match.call
возвращается вызов, в котором указаны имена аргументов; и это должно быть полезно для передачи большого количества аргументов другим функциям.
Например, в функции lm
мы видим вызов функции model.frame
function (formula, data, subset, weights, na.action, method = "qr",
model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE,
contrasts = NULL, offset, ...)
{
cl <- match.call()
mf <- match.call(expand.dots = FALSE)
m <- match(c("formula", "data", "subset", "weights", "na.action",
"offset"), names(mf), 0L)
mf <- mf[c(1L, m)]
mf$drop.unused.levels <- TRUE
mf[[1L]] <- quote(stats::model.frame)
mf <- eval(mf, parent.frame())
Почему это более полезно, чем прямое обращение к model.frame
с указанием имен аргументов, как я делаю дальше?
function (formula, data, subset, weights, na.action, method = "qr",
model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE,
contrasts = NULL, offset, ...)
{
mf <- model.frame(formula = formula, data = data,
subset = subset, weights = weights, subset = subset)
Обратите внимание, что match.call
имеет другое использование, которое я не обсуждаю, сохраняйте вызов в результирующем объекте.