Re: [R] list of matrices -- array

2013-02-17 Thread Tony Plate

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), 
B=cbind(X=c(a=13,b=14,c=15,d=16),Y=17:20,Z=21:24))
$A
  X Y  Z
a 1 5  9
b 2 6 10
c 3 7 11
d 4 8 12

$B
   X  Y  Z
a 13 17 21
b 14 18 22
c 15 19 23
d 16 20 24


 dim(abind(x, along=3))
[1] 4 3 2
 dim(abind(x, along=1.5))
[1] 4 2 3
 dim(abind(x, along=0.5))
[1] 2 4 3
 dim(abind(x, along=1, hier.names=T)) # construct rownames in a hierarchical 
manner A.a, A.b, etc
[1] 8 3
 dim(abind(x, along=2, hier.names=T)) # construct colnames in a hierarchical 
manner
[1] 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:


require(abind)
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.

cheers,

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[[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 :-/


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


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


Re: [R] list of matrices -- array

2013-02-17 Thread Murat Tasan
thanks to all!
didn't know about simplify2array, nor about the abind package.
they're exactly what i wanted.

cheers,

-m

On Sun, Feb 17, 2013 at 9:41 AM, Tony Plate tapl...@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),
 B=cbind(X=c(a=13,b=14,c=15,d=16),Y=17:20,Z=21:24))
 $A
   X Y  Z
 a 1 5  9
 b 2 6 10
 c 3 7 11
 d 4 8 12

 $B
X  Y  Z
 a 13 17 21
 b 14 18 22
 c 15 19 23
 d 16 20 24


 dim(abind(x, along=3))
 [1] 4 3 2
 dim(abind(x, along=1.5))
 [1] 4 2 3
 dim(abind(x, along=0.5))
 [1] 2 4 3
 dim(abind(x, along=1, hier.names=T)) # construct rownames in a
 hierarchical manner A.a, A.b, etc
 [1] 8 3
 dim(abind(x, along=2, hier.names=T)) # construct colnames in a
 hierarchical manner
 [1] 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:


 require(abind)
 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.

 cheers,

 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[[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 :-/


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



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


Re: [R] list of matrices -- array

2013-02-14 Thread Rolf Turner


require(abind)
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.

cheers,

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[[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 :-/


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


Re: [R] list of matrices -- array

2013-02-14 Thread David Winsemius


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,]159   13   17
[2,]26   10   14   18
[3,]37   11   15   19
[4,]48   12   16   20

, , 2

 [,1] [,2] [,3] [,4] [,5]
[1,]   20   16   1284
[2,]   19   15   1173
[3,]   18   14   1062
[4,]   17   13951

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


[R] list of matrices -- array

2013-02-13 Thread Murat Tasan
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 :-/

cheers,

-m

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


Re: [R] list of matrices -- array

2013-02-13 Thread Murat Tasan
FYI - this is my current method, but somehow i just don't like it ;-)

foo - array(NA, dim = c(4,5,length(my_list)))
for(k in 1:length(my_list)) {
  foo[,,k] - my_list[[k]]
}

-m

On Thu, Feb 14, 2013 at 1:03 AM, Murat Tasan mmu...@gmail.com 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 :-/

 cheers,

 -m

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


Re: [R] list of matrices -- array

2013-02-13 Thread arun
Hi,

May be this helps:
library(plyr)
res-aaply(laply(my_list, as.matrix),c(2,3),function(x) x)
attr(res,dimnames)- NULL
 identical(res,foo)
#[1] TRUE
A.K.




- Original Message -
From: Murat Tasan mmu...@gmail.com
To: r-help@r-project.org
Cc: 
Sent: Thursday, February 14, 2013 1:13 AM
Subject: Re: [R] list of matrices -- array

FYI - this is my current method, but somehow i just don't like it ;-)

foo - array(NA, dim = c(4,5,length(my_list)))
for(k in 1:length(my_list)) {
  foo[,,k] - my_list[[k]]
}

-m

On Thu, Feb 14, 2013 at 1:03 AM, Murat Tasan mmu...@gmail.com 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 :-/

 cheers,

 -m

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


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