[R] apply lm() for all the columns of a matrix

Chuck Cleland ccleland at optonline.net
Wed Apr 9 13:49:20 CEST 2008

On 4/9/2008 6:55 AM, Costas Douvis wrote:
> Hi all,
> My question is not really urgent. I can write a loop and solve the
> problem. But I know that I'll be in a similar situation many more times so
> it would be useful to find out the answer
> Is there a fast way to perform linear fit to all the columns of a matrix?
> (or in the one dimension of a multi-dimensional array.) I'm talking about
> many single linear fits, not about a multiple fit. I thought that a
> combination of apply and lm would do it but I can't make it work

   The Details section of ?lm says:

If response is a matrix a linear model is fitted separately by 
least-squares to each column of the matrix.

   That seems to be what you are asking for.  Here is an example:

lm(as.matrix(iris[,1:3]) ~ iris$Species)

lm(formula = as.matrix(iris[, 1:3]) ~ iris$Species)

                         Sepal.Length  Sepal.Width  Petal.Length
(Intercept)              5.006         3.428        1.462
iris$Speciesversicolor   0.930        -0.658        2.798
iris$Speciesvirginica    1.582        -0.454        4.090

> Thank you
> Kostas 

Chuck Cleland, Ph.D.
NDRI, Inc. (www.ndri.org)
71 West 23rd Street, 8th floor
New York, NY 10010
tel: (212) 845-4495 (Tu, Th)
tel: (732) 512-0171 (M, W, F)
fax: (917) 438-0894

More information about the R-help mailing list