From: Gabor Grothendieck <ggrothendieck_at_gmail.com>

Date: Mon 29 Jan 2007 - 16:57:47 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:08:55 2007

Date: Mon 29 Jan 2007 - 16:57:47 GMT

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:08:55 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 - 17: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.
*