[R] list of matrices --> array
mmuurr at gmail.com
Sun Feb 17 19:42:29 CET 2013
thanks to all!
didn't know about simplify2array, nor about the abind package.
they're exactly what i wanted.
On Sun, Feb 17, 2013 at 9:41 AM, Tony Plate <taplate at gmail.com> wrote:
> abind() (from package 'abind') can take a list of arrays as its first
> argument, so in general, no need for do.call() with abind().
> As another poster pointed out, simplify2array() can also be used; while
> abind() gives more options regarding which dimension is created and how
> dimension names are constructed.
>> x <- list(A=cbind(X=c(a=1,b=2,c=3,d=4),Y=5:8,Z=9:12),
> X Y Z
> a 1 5 9
> b 2 6 10
> c 3 7 11
> d 4 8 12
> X Y Z
> a 13 17 21
> b 14 18 22
> c 15 19 23
> d 16 20 24
>> dim(abind(x, along=3))
>  4 3 2
>> dim(abind(x, along=1.5))
>  4 2 3
>> dim(abind(x, along=0.5))
>  2 4 3
>> dim(abind(x, along=1, hier.names=T)) # construct rownames in a
>> hierarchical manner A.a, A.b, etc
>  8 3
>> dim(abind(x, along=2, hier.names=T)) # construct colnames in a
>> hierarchical manner
>  4 6
>> abind(x, along=2, hier.names=T)
> A.X A.Y A.Z B.X B.Y B.Z
> a 1 5 9 13 17 21
> b 2 6 10 14 18 22
> c 3 7 11 15 19 23
> d 4 8 12 16 20 24
> On 2/14/2013 3:53 AM, Rolf Turner wrote:
>> do.call(abind,c(my_list,list(along=0))) # Gives 2 x 4 x 5
>> do.call(abind,c(my_list,list(along=3))) # Gives 4 x 5 x 2
>> The latter seems more natural to me.
>> Rolf Turner
>> On 02/14/2013 07: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[] <- matrix(1:20, ncol = 5)
>>> my_list[] <- 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 :-/
>> R-help at r-project.org mailing list
>> PLEASE do read the posting guide
>> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help