[R] Problem with mutli-dimensional array

Berend Hasselman bhh at xs4all.nl
Tue Oct 2 17:20:46 CEST 2012


On 02-10-2012, at 16:20, Loukia Spineli <spineliloukia26 at gmail.com> wrote:

> 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

If you had inserted this line

            cat("i=",i,"l=",l,"j=",j,"k=",k,"\n")

before the assignment to results[,,l,i] in the inner loop you could have quite easily seen what the problem is.
The counter l (letter el) keeps on increasing in your code and when it reaches 65 R will complain.

So at an appropriate place in the code you need to reset l to 1.
I suggest you move the assignment l<-1 to just before the  line with for( j in 1:Nx[i]) ...
Whether the results are what you desire is up to you to decide.

Please use some more whitespace  and do some indenting in your code. As presented it is unreadable.

Berend



More information about the R-help mailing list