Sorry for the vagueness of my question, your interpretation, however, was spot on. Correct me if I am wrong, but my impression is that apply is a more compact way of a for loop, but that the way R handles them computationally are the same. In the article I seem to remember, there was a significant increase in speed with your second approach, presumably because function calls are avoided in R and the heavy lifting is done in C. I will use your second approach anyway, but can I expect increased computational efficiency with it and, if so, is my reasoning in the prior sentence correct?
BTW, it appears as though my own attempt was almost correct, but I did not transpose the matrix. In genomics, our response variables (genes) are the rows and the predictor values are the column names. The BioConductor packages I routinely use are very good at hiding this and I just didn't come to mind. Mark ------------------------------------------------------------ Mark W. Kimpel MD ** Neuroinformatics ** Dept. of Psychiatry Indiana University School of Medicine 15032 Hunter Court, Westfield, IN 46074 (317) 490-5129 Work, & Mobile & VoiceMail (317) 399-1219 Home Skype: mkimpel ****************************************************************** On Sun, Oct 5, 2008 at 10:28 AM, Duncan Murdoch <[EMAIL PROTECTED]>wrote: > On 05/10/2008 10:08 AM, Mark Kimpel wrote: > >> I have a large matrix, each row of which needs lm applied. I am certain >> than >> I read an article in R-news about this within the last year or two that >> discussed the application of lm to matrices but I'll be darned if I can >> find >> it with Google. Probably using the wrong search terms. >> >> Can someone steer me to this article of just tell me if this is possible >> and, if so, how to do it? My simplistic attempts have failed. >> > > You don't give a lot of detail on what you mean by applying lm to a row of > a matrix, but I'll assume you have fixed predictor variables, and each row > is a different response vector. Then you can use apply() like this: > > x <- 1:10 > mat <- matrix(rnorm(200), nrow=20, ncol=10) > > resultlist <- apply(mat, 1, function(y) lm(y ~ x)) > resultcoeffs <- apply(mat, 1, function(y) lm(y ~ x)$coefficients) > > > "resultlist" will contain a list of 20 different lm() results, > "resultcoeffs" will be a matrix holding just the coefficients. > > lm() also allows the response to be a matrix, where the columns are > considered different components of a multivariate response. So if you > transpose your matrix you can do it all in one call: > > resultmulti <- lm(t(mat) ~ x) > > The coefficients of resultmulti will match resultcoeffs. > > Duncan Murdoch > > Duncan Murdoch > [[alternative HTML version deleted]] ______________________________________________ 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.