[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