[EMAIL PROTECTED] said the following on 9/19/2007 9:50 AM: > Folks, > > I have a 3000 x 4 matrix (y), which I need to regress row-by-row against a > 4-vector (x) to create a > matrix lm.y of intercepts and slopes. To illustrate: > > y <- matrix(rnorm(12000), ncol = 4) > x <- c(1/12, 3/12, 6/12, 1) > > system.time(lm.y <- t(apply(y, 1, function(z) lm(z ~ x)$coefficient))) > [1] 44.72 18.00 69.52 NA NA > > Takes more than a minute to do (and I need to do many similar regressions > a day). > > Is there a more efficient way of handling this? > > I'm running R 2.4.1 on Windows XP Service Pack 2 on a Intel Xeon dual-core > 2.66GHz with 3GB RAM. > > Thanks very much, > > Murali >
Yes. Try, set.seed(1) y <- matrix(rnorm(12000), ncol = 4) x <- c(1/12, 3/12, 6/12, 1) system.time(lm.y <- t(apply(y, 1, function(z) lm(z ~ x)$coefficient))) ## user system elapsed ## 1.10 0.00 38.69 system.time(lm.y2 <- t(coef(lm(t(y) ~ x)))) ## user system elapsed ## 0.02 0.00 0.04 all.equal(lm.y, lm.y2) ## [1] TRUE HTH, --sundar ______________________________________________ R-help@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.