[Rd] formula(model.frame(y~.^2, data=d)) does not return formula from terms attribute of the model.frame

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Jan 19 15:50:01 CET 2011

On Thu, 6 Jan 2011, William Dunlap wrote:

> In R 2.12.0 I get
>  > d <- data.frame(x=1:10, y=log(1:10), f3=LETTERS[rep(1:3,c(3,3,4))])
>  > m <- model.frame(y~.^2, data=d)
>  > formula(m)
>  y ~ x + f3
> In S+ formula(m) gives formula given to model.frame(),
> but in R you have to do the following get that formula:
>  > formula(attr(m, "terms"))
>  y ~ (x + f3)^2

But that has the advantage that you almost certainly have a model 
frame and hence that is what you intend.  With 6-6 (or 20-20 in 
Imperial units) hindsight it would have been better to give model 
frames a class inheriting from "data frame", but it seems that the 
presence of attr(, "terms") is the most common test.

> Would it break anything to add to the top of

Unfortunately, that is rather hard to tell!

> formula.data.frame
> something like
>  if (!is.null(tms <- attr(x, "terms"))) {
>    return(formula(tms))
>  }
> so that formula() would retrieve the formula buried
> in model.frame's output?

I looked (not hard, but without success) for examples of calling 
formula() on a data frame.  I did see that model.frame.default() calls 
as.formula() on a data frame, but only after checking for the absence 
of a "terms" attribute.

Can you explain where it would help?  I think we need to see examples 
to see if a change in meaning would be clearly beneficial.  I can 
envisage cases in which 'x' was a data frame that just happened to 
have been constructed as a model frame and where the currently 
documented meaning was intended.

> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

More information about the R-devel mailing list