[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
> PLEASE do read the posting guide
> 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?
More information about the R-help
mailing list