[R] list of matrices --> array

David Winsemius dwinsemius at comcast.net
Thu Feb 14 12:09:29 CET 2013


On Feb 13, 2013, at 10:03 PM, Murat Tasan wrote:

> i'm somehow embarrassed to even ask this, but is there any built-in
> method for doing this:
>
> my_list <- list()
> my_list[[1]] <- matrix(1:20, ncol = 5)
> my_list[[2]] <- matrix(20:1, ncol = 5)
>
> now, knowing that these matrices are identical in dimension, i'd like
> to unfold the list to a 2x4x5 (or some other permutation of the dim
> sizes) array.
> i know i can initialize the array, then loop through my_list to fill
> the array, but somehow this seems inelegant.
> i also know i can vectorize the matrices and unlist the list, then
> build the array from that single vector, but this also seems inelegant
> (and an easy place to introduce errors/bugs).
>
> i can't seem to find any built-in that handles this already... but
> maybe i just haven't looked hard enough :-/

I think the built-in function you seek is `simplify2array`:

# gives 4 x 5 x 2
 > simplify2array(my_list)
, , 1

      [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

, , 2

      [,1] [,2] [,3] [,4] [,5]
[1,]   20   16   12    8    4
[2,]   19   15   11    7    3
[3,]   18   14   10    6    2
[4,]   17   13    9    5    1

 > # 2 x 4 x 5
  aperm( simplify2array(my_list), c(3,1,2) )


  # 4 x 2 x 5
 > aperm( simplify2array(my_list), c(1,3,2) )

-- 
David Winsemius, MD
Alameda, CA, USA



More information about the R-help mailing list