On Wed, 2009-07-22 at 14:07 -0700, megh wrote: > Thanks for your suggestions. I need one more thing : > > x = y = vector("list") > for (i in 1:5) x[[i]] = rnorm(2); y[[i]] = rnorm(2) > > Here I want to get t(x[[i]]) %*% y[[i]] for each i. Can anyone please help > me?
Two ways: set.seed(123) x = y = vector("list") for (i in 1:5) { x[[i]] = rnorm(2) y[[i]] = rnorm(2) } ## option 1 X <- matrix(unlist(x), nrow = 2) Y <- matrix(unlist(y), nrow = 2) C <- crossprod(X, Y) res1 <- diag(C) ## option 2 res2 <- lapply(1:5, function(i) t(x[[i]]) %*% y[[i]]) res2 <- unlist(res2) all.equal(res1, res2) # should be TRUE In this case, option 1 is quicker by a factor of 2 if that makes a difference in your application, despite doing more manipulations: foo1 <- function(x, y) { X <- matrix(unlist(x), nrow = 2) Y <- matrix(unlist(y), nrow = 2) C <- crossprod(X, Y) diag(C) } foo2 <- function(x, y) { res <- lapply(1:5, function(i) t(x[[i]]) %*% y[[i]]) unlist(res) } system.time(replicate(10000, foo1(x,y))) system.time(replicate(10000, foo2(x,y))) > system.time(replicate(10000, foo1(x,y))) user system elapsed 0.535 0.003 0.540 > system.time(replicate(10000, foo2(x,y))) user system elapsed 0.994 0.001 1.022 HTH G > > Regards, > > > > Jorge Ivan Velez wrote: > > > > Hi megh, > > Perhaps? > > > > # Data > > x = vector("list") > > for (i in 1:5) x[[i]] = rnorm(2) > > > > # 2x2 matrices > > res <- lapply(x, function(a) a %*% t(a) ) > > res > > > > # Funcion from ?Reduce > > add <- function(x) Reduce("+", x) > > > > # Summing up! > > add(res) > > > > See ?lapply and ?Reduce for more information. > > > > HTH, > > > > Jorge > > > > > > On Wed, Jul 22, 2009 at 3:18 PM, megh <megh700...@yahoo.com> wrote: > > > >> > >> Hi, > >> I have created a list object like that : > >> x = vector("list") > >> for (i in 1:5) x[[i]] = rnorm(2) > >> x > >> > >> Now I want to do two things : > >> 1. for each i, I want to do following matrix calculation : t(x[[i]]) %*% > >> x[[i]] i.e. for each i, I want to get a 2x2 matrix > >> 2. Next I want to get x[[1]] + x[[2]] +.... > >> > >> I did following : res=vector("list"); res = sapply(x, function(i) > >> t(x[[i]]) > >> %*% x[[i]]) > >> However above syntax is not giving desired result. Any suggestion please? > >> > >> -- > >> View this message in context: > >> http://www.nabble.com/A-question-on-operation-on-list-tp24612796p24612796.html > >> Sent from the R help mailing list archive at Nabble.com. > >> > >> ______________________________________________ > >> 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. > >> > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > 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. > > > > > -- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% Dr. Gavin Simpson [t] +44 (0)20 7679 0522 ECRC, UCL Geography, [f] +44 (0)20 7679 0565 Pearson Building, [e] gavin.simpsonATNOSPAMucl.ac.uk Gower Street, London [w] http://www.ucl.ac.uk/~ucfagls/ UK. WC1E 6BT. [w] http://www.freshwaters.org.uk %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% ______________________________________________ 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.