From: Gabor Grothendieck <ggrothendieck_at_gmail.com>

Date: Mon 29 Jan 2007 - 17:08:41 GMT

R-help@stat.math.ethz.ch 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. Received on Tue Jan 30 04:28:31 2007

Date: Mon 29 Jan 2007 - 17:08:41 GMT

And yet one more. This one does not use eval but uses do.call, quote and bquote instead:

lapply(levels(CO2$Treatment), function(lev) do.call("lm",

list(uptake ~ conc, quote(CO2), subset = bquote(Treatment == .(lev)))))

On 1/29/07, Gabor Grothendieck <ggrothendieck@gmail.com> wrote:

> In thinking about this a bit more here is an even shorter one yet it

*> does show the level in the Call output. See ?bquote
**>
**> lapply(levels(CO2$Treatment), function(lev)
**> eval(bquote(lm(uptake ~ conc, CO2, subset = Treatment == .(lev)))))
**>
**>
**> On 1/29/07, Gabor Grothendieck <ggrothendieck@gmail.com> wrote:
**> > Often you will find that if you arrange your data in a
**> > desirable way in the first place everything becomes
**> > easier. What you really want is a data frame such
**> > as the last three columns of the builtin data frame
**> > CO2 where Treatment corresponds to country and
**> > the two numeric variables correspond to your y and x.
**> >
**> > Then its easy:
**> >
**> > lapply(levels(CO2$Treatment), function(lev)
**> > lm(uptake ~ conc, CO2, subset = Treatment == lev))
**> >
**> > The only problem with the above is that the Call: in the
**> > output does not really tell you which level of Treatment
**> > is being used since it literally shows
**> > "lm(uptake ~ conc, CO2, subset = Treatment == lev)"
**> > each time. To get around substitute the value of lev in.
**> > Because R uses delayed evaluation you also need to force the
**> > evaluation of lev prior to substituting it in:
**> >
**> > lapply(levels(CO2$Treatment), function(lev) {
**> > lev <- force(lev)
**> > eval(substitute(lm(uptake ~ conc, CO2, subset = Treatment == lev)),
**> > list(lev = lev))
**> > })
**> >
**> >
**> > Now if you really want to do it the way you specified originally
**> > try this.
**> >
**> > Suppose we use attach to grab the variables
**> > x1, x2, x3, x4, y1, y2, y3, y4 out of the builtin
**> > anscombe data frame for purposes of getting
**> > our hands on some sample data. In your case
**> > the variables would already be in the workspace
**> > so the attach is not needed.
**> >
**> > Then simply reconstruct the formula in fo. You
**> > could simply use lm(fo) but then the Call: in the
**> > output of lm would literally read lm(fo) so its
**> > better to use do.call:
**> >
**> > # next line gives the variables x1, x2, x3, x4, y1, y2, y3, y4
**> > # from the builtin ancombe data set.
**> > # In your case such variables would already exist.
**> > attach(anscombe)
**> > lapply(1:4, function(i) {
**> > ynm <- paste("y", i, sep = "")
**> > xnm <- paste("x", i, sep = "")
**> > fo <- as.formula(paste(ynm, "~", xnm))
**> > do.call("lm", list(fo))
**> > })
**> > detach(anscombe)
**> >
**> > Or if all the variables have the same length you could use
**> > a form such as ancombe in the first place:
**> >
**> > Actually this is not really a recommended way of
**> > proceeding. You would be better off putting all
**> > your variables in a data frame and using that.
**> >
**> > lapply(1:4, function(i) {
**> > fo <- as.formula(paste(names(anscombe)[i+4], "~", names(anscombe)[i]))
**> > do.call("lm", list(fo, data = quote(anscombe)))
**> > })
**> >
**> > or
**> >
**> > lapply(1:4, function(i) {
**> > fo <- y ~ x
**> > fo[[2]] <- as.name(names(anscombe)[i+4])
**> > fo[[3]] <- as.name(names(anscombe)[i])
**> > do.call("lm", list(fo, data = quote(anscombe)))
**> > })
**> >
**> >
**> >
**> > On 1/29/07, C.Rosa@lse.ac.uk <C.Rosa@lse.ac.uk> wrote:
**> > > Dear All,
**> > >
**> > > I am using R for my research and I have two questions about it:
**> > >
**> > > 1) is it possible to create a loop using a string, instead of a numeric vector? I have in mind a specific problem:
**> > >
**> > > Suppose you have 2 countries: UK, and USA, one dependent (y) and one independent variable (y) for each country (vale a dire: yUK, xUK, yUSA, xUSA) and you want to run automatically the following regressions:
**> > >
**> > >
**> > >
**> > > for (i in c("UK","USA"))
**> > >
**> > > output{i}<-summary(lm(y{i} ~ x{i}))
**> > >
**> > >
**> > >
**> > > In other words, at the end I would like to have two objects as output: "outputUK" and "outputUSA", which contain respectively the results of the first and second regression (yUK on xUK and yUSA on xUSA).
**> > >
**> > >
**> > >
**> > > 2) in STATA there is a very nice code ("outreg") to display nicely (and as the user wants to) your regression results.
**> > >
**> > > Is there anything similar in R / R contributed packages? More precisely, I am thinking of something that is close in spirit to "summary" but it is also customizable. For example, suppose you want different Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 or a different format display (i.e. without "t value" column) implemented automatically (without manually editing it every time).
**> > >
**> > > In alternative, if I was able to see it, I could modify the source code of the function "summary", but I am not able to see its (line by line) code. Any idea?
**> > >
**> > > Or may be a customizable regression output already exists?
**> > >
**> > > Thanks really a lot!
**> > >
**> > > Carlo
**> > >
**> > > ______________________________________________
**> > > R-help@stat.math.ethz.ch 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.
**> > >
**> >
**>
*

R-help@stat.math.ethz.ch 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. Received on Tue Jan 30 04:28:31 2007

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.1.8, at Mon 29 Jan 2007 - 18:30:43 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*