The first thing to understand is that despite similarity in names, `match` and `match.call` are doing very different things, which should not be confused with each other.
For understanding what a function is doing, it is helpful to watch what it does at each step. With functions like `lm` that are built in, we cannot easily modify the source code with print statements and the like, then rerun, but the `trace` and `browser` functions are nice for allowing us to debug these functions. If you run the following line: trace(lm, browser, at=7) Then this will insert a call to `browser` into the `lm` function which when you next run `lm` will pause at about line 7 (just after the code that you show) and allow you to examine the values of `mf` and `m` and any other variables. Unfortunately just printing `mf` is not super helpful for this, since it prettys the call, but printing as.list(mf) is more useful. Basically mf will hold information on how `lm` was called, the first element is that `lm` is the function that was called, then further elements are the arguments that were passed in. The line with `match` then identifies which elements of mf correspond to the list of arguments that we want to keep for the next part (essentially the next few lines create a call object to the `model.frame` funcion with the same arguments that you passed to `lm` but without any arguments not in the short list. When in `browser` mode you can step through the evaluation of the function with "s" or "n" and quit everything with "Q" (see ?browser for details) Don't forget to call `untrace(lm)` when you are through. On Thu, Mar 16, 2023 at 6:16 AM Sorkin, John <jsor...@som.umaryland.edu> wrote: > > I am trying to understand how to write an "advanced" function. To do so, I am > examining the lm fucnction, a portion of which is pasted below. I am unable > to understand what match.call or match does, and several other parts of lm, > even when I read the help page for match.call or match. > (1) can someone point me to an explanation of match.call or match that can be > understood by the uninitiated? > (2) can someone point me to a document that will help me learn how to write > an "advanced" function? > > Thank you, > John > > > lm > function (formula, data, subset, weights, na.action, method = "qr", > model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, > contrasts = NULL, offset, ...) > { > ret.x <- x > ret.y <- y > cl <- match.call() > mf <- match.call(expand.dots = FALSE) > m <- match(c("formula", "data", "subset", "weights", "na.action", > "offset"), names(mf), 0L) > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. -- Gregory (Greg) L. Snow Ph.D. 538...@gmail.com ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.