[R] Problem with mutli-dimensional array

Rui Barradas ruipbarradas at sapo.pt
Wed Oct 3 15:35:27 CEST 2012


Hello,

I'm glad it helped.
Now you have what is a data structure problem. The computations are the 
same but in a different output.

First of all a terminology issue. In R the correct names for the data 
structures you've refered to are 'list', 'matrix' and 'array'. To make 
it short,

vector ---> 1-dim
matrix ---> 2-dim
array ---> n-dim

and

list ---> no dim attribute, can hold any type of data structure.

Your first sentence of this last post would read (changes in uppercase)

Actually I am trying to make an LIST of length 7, where each LIST ELEMENT
  IS AN ARRAY containing a different number of 2 by 2 matrices.

In what follows, for the 3-dim array case I'll use the naming convention 
[row, column, slice].
Each of your output list elements is an array with a possibly varying 
number of slices. Right now all of them have 64 slices.

1. You need a list of 7 elements, each of them indexed by your current 'i';
2. Each of those elements is a 3-dim array, each slice is a 2x2 matrix 
and each slice is indexed by your current 'l'.
3. Let's try it.


Nx <- rep(0, length(x))
Ny <- rep(0, length(y))
n <- (x+1)*(y+1)

results <- vector("list", 7)

for(i in 1:length(x)){
     Nx[i] <- length(1:(x[i]+1))
     Ny[i] <- length(1:(y[i]+1))
     results[[i]] <- array(dim = c(2, 2, n[i]))
     l <- 1
     for(j in 1:(Nx[i])){
         for(k in 1:(Ny[i])){
             tmp <- c((0:x[i])[j], (0:y[i])[k],-(0:x[i])[j], -(0:y[i])[k])
             results[[i]][,, l] <- mat.stat[,,i] + matrix(tmp, nrow=2, 
ncol=2,byrow=T)
             l <- l + 1
         }
     }
}
results


I think this is it. Let us now if not.

Rui Barradas
Em 03-10-2012 08:48, Loukia Spineli escreveu:
> Thank you very much for your suggestions. They both worked!
>
> Actually I am trying to make an array of length 7, where each array
> contains a different number of 2 by 2 matrices. The vector "n" defines the
> different number of matrices across the arrays. Therefore, the parameter
> "l" has to change in every array i. Of course  I cannot put the vector "n"
> directly into the dimensions of the array (under the name "results").
>
> First, I wanted to see if the code gives rational results assuming that
> each array has the same number of 2 by 2 matrices. Fortunately, the results
> are rational (thanks to your help, as well). Now I am taking the problem to
> the next level and I want to construct this array of different number of 2
> by 2 matrices!
>
> Any suggestions would be really very helpful!
>
> On Tue, Oct 2, 2012 at 6:23 PM, Rui Barradas <ruipbarradas at sapo.pt> wrote:
>
>> Hello,
>> See if this is it.
>>
>>
>> Nx <- rep(0,length(x))
>> Ny <- rep(0,length(y))
>> n <- (x+1)*(y+1)
>> results <- array(0, dim=c(2,2,64,7))
>> # l <- 1 # <--------------------------- This changed place
>>
>> for(i in 1:length(x)){
>>      Nx[i] <- length(1:(x[i]+1))
>>      Ny[i] <- length(1:(y[i]+1))
>>      l <- 1 # <----------------------- To here
>>
>>      for(j in 1:(Nx[i])){
>>          for(k in 1:(Ny[i])){
>>
>>
>> Hope this helps,
>>
>> Rui Barradas
>> Em 02-10-2012 15:20, Loukia Spineli escreveu:
>>
>>> I want to make a multi-dimensional array. To be specific I want to make
>>> the
>>> following array
>>>
>>> results<-array(0,dim=c(2,2,64,**7))
>>>
>>> This is the code I have created but it gives no result due to the error
>>> "subscript out of bound".
>>>
>>> x<-rep(7,7)  # Missingness in intervention
>>> y<-rep(7,7) # Missingness in control
>>>
>>> arraynames<-list(Group=c("**Success","Failure"),Outcome=c(**
>>> "Intervention","Control"),**Trial=c("1":"7"))
>>> mat.stat<-array(c(9,16,10,15,**66,12,44,23,102,88,66,104,277,**
>>> 60,247,119,23,43,20,41,201,**162,122,
>>> 263,14,41,4,41),dim=c(2,2,7),**dimnames=arraynames);mat.stat
>>>
>>> Nx<-rep(0,length(x))
>>> Ny<-rep(0,length(y))
>>> n<-(x+1)*(y+1)
>>> results<-array(0,dim=c(2,2,64,**7))
>>> l<-1
>>> for(i in 1:length(x)){
>>> Nx[i] <- length(1:(x[i]+1))
>>> Ny[i] <- length(1:(y[i]+1))
>>> for(j in 1:(Nx[i])){
>>> for(k in 1:(Ny[i])){
>>> results[,,l,i]<-mat.stat[,,i]+**matrix(c(c(0:x[i])[j],c(0:y[i]**
>>> )[k],-c(0:x[i])[j],
>>> -c(0:y[i])[k]),nrow=2,ncol=2,**byrow=T)
>>> l<-l+1
>>> }
>>> }
>>> }
>>> results
>>>
>>> Any suggestion would be really welcome!
>>> Thank you very much!
>>>
>>> Loukia
>>>
>>>          [[alternative HTML version deleted]]
>>>
>>> ______________________________**________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
>>> PLEASE do read the posting guide http://www.R-project.org/**
>>> posting-guide.html <http://www.R-project.org/posting-guide.html>
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>




More information about the R-help mailing list