# [R] Column wise matrix multiplication

(Ted Harding) Ted.Harding at wlandres.net
Mon Feb 20 18:54:17 CET 2012

```On 20-Feb-2012 Graziano Mirata wrote:
> Hi all,
> I am trying to multiply each column of a matrix such to have
> a unique resulting vector with length equal to the number of
> rows of the original matrix. In short I would like to do what
> prod(.) function in Matlab does, i.e.
>
> A <-matrix(c(1:10),5,2)
>
> V = A[,1]*A[,2]
>
> Thank you
>
> Graziano

The Matlab prod(A,2) function computes the products along the
rows of the matrix A and returns the result as a column vector,
of length equal to the number of rows in A, which seems to be
what you describe.

result is a simple "R vector" which is not an array (and in
particular is not a column vector):

A[,1]*A[,2]
# [1]  6 14 24 36 50

dim(A[,1]*A[,2])
# NULL

For a matrix A with arbitrary number of columns, if you wanted
the row sums rather than the row products, you could use the
R function rowSums():

rowSums(A)
# [1]  7  9 11 13 15

This is still a dimensionless "simple R vector":

dim(rowSums(A))
# NULL

Unfortunately, there seems to be no equivalent for products
(e.g. "rowProds"). But you can define one:

rowProds <- function(X){ apply(X,1,FUN="prod") }

rowProds(A)
# [1]  6 14 24 36 50

Even then, the result is a "simple R vector", without dimensions:

dim(rowProds(A))
# NULL

If you need an array (row) vector then you can apply t():

t(rowProds(A))
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    6   14   24   36   50

or t(t()) for a column vector:

t(t(rowProds(A)))
#      [,1]
# [1,]    6
# [2,]   14
# [3,]   24
# [4,]   36
# [5,]   50

Ted.

-------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at wlandres.net>
Date: 20-Feb-2012  Time: 17:54:13
This message was sent by XFMail

```