Efficiently compute the row sums of a 3d array in R
        Posted  
        
            by 
                Gavin Simpson
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Gavin Simpson
        
        
        
        Published on 2011-02-27T19:36:33Z
        Indexed on 
            2011/02/27
            23:24 UTC
        
        
        Read the original article
        Hit count: 308
        
Consider the array a:
> a <- array(c(1:9, 1:9), c(3,3,2))
> a
, , 1
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
, , 2
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
How do we efficiently compute the row sums of the matrices indexed by the third dimension, such that the result is:
     [,1] [,2]
[1,]   12   12
[2,]   15   15
[3,]   18   18
??
The column sums are easy via the 'dims' argument of colSums():
> colSums(a, dims = 1)
but I cannot find a way to use rowSums() on the array to achieve the desired result, as it has a different interpretation of 'dims' to that of colSums().
It is simple to compute the desired row sums using:
> apply(a, 3, rowSums)
     [,1] [,2]
[1,]   12   12
[2,]   15   15
[3,]   18   18
but that is just hiding the loop. Are there other efficient, truly vectorised, ways of computing the required row sums?
© Stack Overflow or respective owner