William Dunlap
2011-Jan-07 01:29 UTC
[Rd] formula(model.frame(y~.^2, data=d)) does not return formula from terms attribute of the model.frame
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 Would it break anything to add to the top of 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? Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com
Prof Brian Ripley
2011-Jan-19 14:50 UTC
[Rd] formula(model.frame(y~.^2, data=d)) does not return formula from terms attribute of the model.frame
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)^2But 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 ofUnfortunately, 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