一部のR関数の本体では、たとえばlm
のように、match.call
関数の呼び出しを参照してください。ヘルプページにあるように、関数内で使用すると、match.call
は引数名が指定された呼び出しを返します。これは多数の引数を別の関数に渡すのに便利であると考えられます。例えば、lm
機能では、我々は、私は次に何として関数の呼び出しmodel.frame
match.callはなぜ有用なのですか?
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
が、私は結果のオブジェクトにコールを保存し、議論していない別の用途があることに注意してください。
1つでは、すべてを書き出す必要はありません。 'f
十分に公正で、私は逆引き引き抜きを行うこともできますね。 do.call(sum、l [setdiff(names(l)、 'z'){f - function(x、y、z){l < - as.list(match.call())[ - 1] ])} '。とにかく、私は 'lm'での使用について混乱していたと思います。しかし、私はすべてが '...'引数で解くことができます。私は嫌な気持ちになると思う。 – Usobi
@Usobi: 'match.call()'は次のような意味でより強固ですか? '...'を使うと、どんな引数が渡されるのかわからないので、あなたが望んでいない、あるいは予期せぬことで物事が壊れてしまうことがあるかもしれません。一方、引数名を明示的に繰り返して渡すと、関数の引数定義を変更すると、コードがリファクタリングされにくくなります。 – peterthinking