[R] sum

Peter Dalgaard BSA p.dalgaard at biostat.ku.dk
Wed Apr 23 23:50:06 CEST 2003


Barry Rowlingson <B.Rowlingson at lancaster.ac.uk> writes:

> Luis Silva wrote:
> > Dear helpers
> > I have a list where each element is a matrix (the list is obtained
> > with lapply). I want to sum those matrices. Is there a function to
> > do that? The sum function sums all the elements...

>   Here's a one-liner that converts your list into an array (by
> unlisting it and then packing into an array with the right three
> dimensions) and then runs apply(...,c(1,2),sum) to get the answer you
> want:

Didn't someone do an abind() function at some point? (Generalizing
cbind/rbind) 
 
> apply(array(unlist(foo),c(dim(foo[[1]])[1],dim(foo[[1]])[2],length(foo))),c(1,2),sum)
>           [,1]     [,2]     [,3]
> [1,] 1.676667 4.010000 6.343333
> [2,] 2.843333 5.176667 7.510000
> 
> I'm sure there's a better way.

l <- foo
apply(array(unlist(l),c(dim(l[[1]]),length(l))),c(1,2),sum)

is a bit shorter.

Even shorter, although I'm not sure better in all senses of the word,
same basic idea:

matrix(apply(sapply(l,c),1,sum),dim(l[[1]]))

However, aren't we ignoring the obvious?:

s<-0;(for(a in l)s<-s+a)


-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)             FAX: (+45) 35327907



More information about the R-help mailing list