Angelo Canty wrote:
Hi,

Suppose that I have a list where each component is a list of two
matrices.  I also have a vector of weights.  How can I collapse my
list of lists into a single list of two matrices where each matrix
in the result is the weighted sum of the corresponding matrices.

I could use a loop but this is a nested calculation so I was hoping
there is a more efficient way to do this.  To help clarify, here is
the code I would use with a for loop

result <- list(mat1=matrix(0,nrow1,ncol1),
               mat2=matrix(0,nrow2,ncol2))
for (i in seq(along=matlist)) {
   result$mat1 <- result$mat1+w[i]*matlist[[i]]$mat1
   result$mat2 <- result$mat2+w[i]*matlist[[i]]$mat2
}

I apologise if this is a trivial question.  Unfortunately I don't have
my copy of V&R S Programming to hand.

Here is one possibility:


result <- list(
  mat1 = matrix(rowSums(sapply(matlist, function(x)x$mat1) %*% diag(w)), nrow1, ncol1)
  mat2 = matrix(rowSums(sapply(matlist, function(x)x$mat2) %*% diag(w)), nrow2, ncol2)
)

Warning: It doesn't have the readability that the original code has though.

Paul.
--
--------------------------------------------------------------------------
  Dr. Paul Y. Peng, Associate Professor            Phone: (709) 737 8080
  Department of Mathematics and Statistics           Fax: (709) 737 3010
  Memorial University of Newfoundland          E-mail: [EMAIL PROTECTED]
  St. John's, NL A1C 5S7, Canada             Web: www.math.mun.ca/~ypeng

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to