[R] calling objects in a foreloop

Thomas Lumley tlumley at u.washington.edu
Mon Mar 14 22:35:08 CET 2005


On Mon, 14 Mar 2005, Benjamin M. Osborne wrote:

> I want to organize outputs from several regressions into a handy table.  When I
> try the following, each of my "fit_s" is replaces instead of read.  Is there a
> way to read from the regression summaries that does not require writing
> separate lines of code for each?


Put the lm objects into a list rather than into separate variables, then 
you can loop or lapply() over the list.

fits<-vector("list",8)
fits[[1]]<-lm(dBA.spp16$sp2.dBA.ha~dBA.spp16$sp1.dBA.ha)
fits[[2]]<-lm(dBA.spp16$sp3.dBA.ha~dBA.spp16$sp1.dBA.ha)
etc

dBA.spp16.fits<-matrix(NA, nrow=8, ncol=5)
for (i in 1:8){
     summ<-summary(fit[[i]])
     dBA.spp16.fits[i,2]<-summ$coef[1,1]
     dBA.spp16.fits[i,3]<-summ$coef[2,1]
     dBA.spp16.fits[i,4]<-summ$r.squared
     dBA.spp16.fits[i,5]<-summ$adj.r.squared
}

Other things to note

1/  You can't put the formula into a numeric matrix
2/ lm(dBA.spp16$sp2.dBA.ha~dBA.spp16$sp1.dBA.ha) can be more elegantly 
written as
    lm(sp2.dBA.ha~sp1.DB.ha, data=dBA.spp16)


When you find yourself doing computations on the names of objects rather 
than on their values it is usually a bad sign.


 	-thomas




More information about the R-help mailing list