# Re: [R] multidimensional lists

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Wed 27 Sep 2006 - 17:39:55 GMT

Just one other comment if the matrices have the same dimensions: they could alternately be represented as a 4d array:

A <- matrix(1:4, 2)

AA <- matrix(list(A, 10*A, 100*A, 1000*A), 2, byrow = TRUE)    AA[1,2]

AAA <- array(unlist(AA), c(2,2,2,2))
AAA[,,1,2] # same

This could have an advantage if you need to do things like easily take the top left element of each matrix,

AAA[1,1,,] which in terms of AA would have required the longer expression:

replace(AA, TRUE, lapply(AA, "[", 1, 1))

On 9/27/06, Gabor Grothendieck <ggrothendieck@gmail.com> wrote:
> Try this:
>
> AA <- matrix(list(A, 10*A, 100*A, 1000*A), 2, byrow = TRUE)
> AA[1,2]
>
>
> On 9/27/06, Evan Cooch <cooch17@verizon.net> wrote:
> > In the process of moving a number of my scripts from MATLAB -> R, I've
> > discovered that there is no 'pure' equivalent of MATLAB's cell arrays,
> > which I use quite often. Basically, I create matrices (as a cell array)
> > where each element of the matrix is itself a matrix (e.g., 2x2 cell
> > array where each element of the array is another matrix). I pass these
> > cell arrays to various functions which then do clever things with the
> > various matrices (of course) - basically, I need to be able to pass
> > collections of matrices to functions to do various things, and I need to
> > be able to control the dimensionality of the cell array to preserve some
> > structural relationships among the matrices in the array. The cell array
> > in MATLAB handles this with aplomb.
> >
> > So far, in R, I've used lists. Given (say) 4 matrices (A,B,C,D), in
> > MATLAB I can use
> >
> > test={A,B,C,D} for a row vector cell array, or
> >
> > test={A;B;C;D} for a column vector cell array.
> >
> > In R, I get more or less the same thing using
> >
> > test=list(A,B,C,D)
> >
> > but this only gives me a row list. For a bunch of technical reasons, I
> > need to be able to control the orientation (as noted)- this is
> > especially true for n-dimensional cell arrays. In MATLAB, for example, I
> > could generate a (say) 2x2 cell array using
> >
> > test={A B;C D}
> >
> > The only way I can figure out how to do this in R is using something like
> >
> > test=list(A,B,C,D);
> > dim(test) < c(2,2);
> >
> > This seems to work, but defaults to bycolumn (in other words, instead of
> >
> > A B
> > C D
> >
> > I get
> >
> > A C
> > B D
> >
> > )
> >
> > So, I follow with
> >
> > test=t(test) as needed to flip the thing around to byrow.
> >
> > OK, so the question is - is there a better way? This *seems* to work,
> > but I'm discovering that R is a lot like working with LaTeX (something I
> > know much more about) - you can do most things, but there is often a
> > more elegant way if you can figure out how to find out about it.
> >
> >
> > ______________________________________________
> > R-help@stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help