[R] putting match.call to good use

Peter Dalgaard P.Dalgaard at biostat.ku.dk
Wed Jan 28 16:29:37 CET 2009


Prof Brian Ripley wrote:
> On Wed, 28 Jan 2009, Harald Eikrem wrote:
> 
>> ( I just became aware the mailer enforces html bodies, as such removed
>> by the list handler.  Sorry about that.  My message was )
>>
>> I have this function
>>
>> slm <- function(fun=lm, ...) {
>>  #ilm <- eval(match.call()[-1]);  # no way
>>  ilm <- eval(parse(text=sub("^list", deparse(substitute(fun)),
>> deparse(substitute(...())))));
>>  ...
>>
>> The latter actually does the trick, but recognising how some gurus
>> hate parse, I would like to know if this can anyhow be done with
>> match.call, or any other reasonable solution.
>>
>> The issue here is that lm (and likewise glm, bayesglm, etc.) returns
>> the function call, which needs to show up as the original args to slm
>> of course.
> 
> The way to do this is eval(substitute()).  E.g. from the new Rd2HTML
> 
>         Rd <- eval(substitute(parse_Rd(f, encoding = enc),
>                              list(f = Rd,enc = encoding)))
> 

I don't understand the

   substitute(...())

bit (looks like an unexpected feature), but I suspect that it might also
be a good idea to read and understand the first dozen lines or so of the
lm function itself.

-- 
   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907




More information about the R-help mailing list