You could do it with a double sapply like this:
tr <- function(x) sum(diag(x)) sapply(a, function(x1) sapply(a, function(x2) tr(x1%*%t(x1)%*%x2%*%t(x2)) / (tr(x1%*%t(x1))*tr(x2%*%t(x2))))) Date: Mon, 20 Sep 2004 13:24:49 -0400 From: Stephane DRAY <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Subject: [R] Multiple operations on list Hello, suppose I have a list with matrices: a=list(x1=matrix(rnorm(10),5,2),x2=matrix(rnorm(10),5,2),x3=matrix(rnorm(10),5,2)) I want to compute for all combination of xi and xj (x1,x2 x1,x3 and x2,x3) a value. This value is given for the pair x1,x2 by trace(x1%*%t(x1)%*%x2%*%t(x2)) / trace(x1%*%t(x1))*trace(x2%*%t(x2)) I know that product matrices t(xi)%*%xi can be obtained by: aa=lapply(a,crossprod) but I do not know how to "mix" the values in aa to obtain the desired values. Is there a way to do it without for loop ? Thanks in advances, sincerely St�phane DRAY -------------------------------------------------------------------------------------------------- D�partement des Sciences Biologiques Universit� de Montr�al, C.P. 6128, succursale centre-ville Montr�al, Qu�bec H3C 3J7, Canada Tel : (514) 343-6111 poste 1233 Fax : (514) 343-2293 E-mail : [EMAIL PROTECTED] ______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
