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. Your code above does this for your 2-column example, but the 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.hard...@wlandres.net> Date: 20-Feb-2012 Time: 17:54:13 This message was sent by XFMail ______________________________________________ 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.