[R] an array of matrices

Scott Hyde hydes at byuh.edu
Tue May 22 05:24:45 CEST 2007

```Thanks for the replies Jim and Petr!

I decided to do it a slightly different way. Using Jim's method, the matrices needed to be created before the array, whereas I needed the array to be allocated first, and then filled.  Here's how I did it:

This command creates a blank array of lists

> y=array(list(),c(i,j,k))

Then each item can be accessed (and assigned) using

> y[[i,j,k]]

For example:

> for (i in 1:2)
+   for (j in 1:2)
+     for (k in 1:2)
+       y[[i,j,k]] <- diag(i+j+k)

> y
, , 1

[,1]       [,2]
[1,] Numeric,9  Numeric,16
[2,] Numeric,16 Numeric,25

, , 2

[,1]       [,2]
[1,] Numeric,16 Numeric,25
[2,] Numeric,25 Numeric,36

> y[[1,1,1]]
[,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

> y[[2,1,2]]
[,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    0    1    0    0    0
[3,]    0    0    1    0    0
[4,]    0    0    0    1    0
[5,]    0    0    0    0    1

Thanks again for the help!

-Scott

---- Original message ----
>Date: Mon, 21 May 2007 04:57:40 -0400
>From: "jim holtman" <jholtman at gmail.com>
>Subject: Re: [R] an array of matrices
>To: "Scott Hyde" <hydes at byuh.edu>
>Cc: r-help at stat.math.ethz.ch
>
>   Create a matrix of list:
>
>   > A = matrix(1:4,2,2)
>   > B = matrix(1:25,5,5)
>   > C = matrix(1,3,3)
>   > D = matrix(1,4,4)
>   > x <- list(A,B,C,D)
>   > dim(x) <- c(2,2)
>   > x[[1,1]]
>        [,1] [,2]
>   [1,]    1    3
>   [2,]    2    4
>   > x[[2,2]]
>        [,1] [,2] [,3] [,4]
>   [1,]    1    1    1    1
>   [2,]    1    1    1    1
>   [3,]    1    1    1    1
>   [4,]    1    1    1    1
>
>
>   On 5/21/07, Scott Hyde <hydes at byuh.edu> wrote:
>
>     I'd like to have a three dimensional array of
>     matrices.   I thought I could construct a five
>     dimensional array to have the three dimensional
>     array of matrices.  However, not all of the
>     matrices in the array have the same dimensions,
>     which seems to mean I can't use a five dimensional
>     array.
>
>     What I'd like is this:
>
>     A = matrix(1:4,2,2)
>     B = matrix(1:25,5,5)
>     C = matrix(1,3,3)
>     D = matrix(1,4,4)
>
>     I'd like to construct an array for which, if I
>     type F[1,1], it returns matrix A, type F[1,2] and
>     it returns B, type F[2,1] and it returns C, or
>     type F[2,2] and it returns D.
>
>     Essentially, I'd like to be able to access them
>     like they were elements of a matrix.  Although
>     this example is only a two dimensional array of
>     matrices, I'd like it to also work with three
>     dimensions also.
>
>     The only thing I thought of to try was to make an
>     array of lists and store the matrices inside of an
>     array of lists (where each matrix is stored as a
>     list with one item).
>
>     Any suggestions?
>
>     -Scott
>
>     ______________________________________________
>     R-help at stat.math.ethz.ch mailing list
>     https://stat.ethz.ch/mailman/listinfo/r-help
>     http://www.R-project.org/posting-guide.html
>     and provide commented, minimal, self-contained,
>     reproducible code.
>
>   --
>   Jim Holtman
>   Cincinnati, OH
>   +1 513 646 9390
>
>   What is the problem you are trying to solve?

```