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

______________________________________________
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.

Reply via email to