[R] Building a formula using paste

Gabor Grothendieck ggrothendieck at gmail.com
Fri Feb 1 14:59:18 CET 2008


This is discussed in this thread:

http://tolstoy.newcastle.edu.au/R/e2/help/07/01/9353.html

This mostly goes over the ground discussed here plus there
is a do.call based solution there too.

On Feb 1, 2008 7:10 AM, john seers (IFR) <john.seers at bbsrc.ac.uk> wrote:
>
>
>
> Thanks for the help.
>
> Regards
>
>
> John Seers
>
>
> ---
> -----Original Message-----
> From: Peter Dalgaard [mailto:P.Dalgaard at biostat.ku.dk]
> Sent: 01 February 2008 10:04
> To: Bill.Venables at csiro.au
>
> Cc: john seers (IFR); r-help at stat.math.ethz.ch
> Subject: Re: [R] Building a formula using paste
>
> Bill.Venables at csiro.au wrote:
> > use as.formula() rather than just formula().
> >
> >
> >
> Hm?
>
> That doesn't seem to cut it for me:
>
> > f <- as.formula(y~x)
> > lm(f)
>
> Call:
> lm(formula = f)
>
> Coefficients:
> (Intercept)            x
>    0.06437     -0.09714
>
> > summary(lm(f))
>
> Call:
> lm(formula = f)
>
> Residuals:
>    Min      1Q  Median      3Q     Max
> -1.2780 -0.4229 -0.3208  0.7534  1.3073
>
> Coefficients:
>            Estimate Std. Error t value Pr(>|t|)
> (Intercept)  0.06437    0.61961   0.104    0.920
> x           -0.09714    0.09986  -0.973    0.359
>
> Residual standard error: 0.907 on 8 degrees of freedom
> Multiple R-Squared: 0.1058,     Adjusted R-squared: -0.005995
> F-statistic: 0.9464 on 1 and 8 DF,  p-value: 0.3591
>
> <etc.>
>
> The problem is that we get the call and not the formula, and this appears to be the case whether you use formula or as.formula. Also
>
> > identical(as.formula(y~x), formula(y~x))
> [1] TRUE
>
> I see two workarounds:
>
> (a) Extract the formula explicitly and print it along with the output
>
> > formula(m)
> y ~ x
> > m
>
> Call:
> lm(formula = f)
>
> Coefficients:
> (Intercept)            x
>    0.06437     -0.09714
>
> (b) substitution tricks, e.g.
>
> > eval(bquote(lm(.(f))))
>
> Call:
> lm(formula = y ~ x)
>
> Coefficients:
> (Intercept)            x
>    0.06437     -0.09714
>
>
> >
> > Hi All
> >
> > I have looked but cannot find an answer to this.
> >
> > I want to build a formula dynamically (in a function), using for
> > example paste, and using it in a model:
> >
> >       fr<-"F1"
> >       f1<-formula(paste(fr, "~ SensoryTerm"))
> >       m1<-aov(f1, data=vdata)
> >
> > So this is the equivalent of m1<-aov(F1 ~ SensoryTerm, data=vdata)
> >
> > This works fine but the problem is the formula appears as "f1" in the
> > summary(m1) of the model and not "F1 ~ SensoryTerm". With many models
> > this can be a bit confusing ....
> >
> > Is there a way to code this so the formula appears in the model summary?
> >
> >
> >
>
>
> --
>   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
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>



More information about the R-help mailing list