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, [email protected]
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
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel