Skip to content
Prev 42540 / 398506 Next

3-dimensional looping Q.

You can compute cor by hand without loops but the code is not much 
faster (dim(slp)[1]==3):

<<*>>=
set.seed(13)
n<-3
y<-1:n
slp<-array(rnorm(n*73*144),c(3,73,144))
n.1<-length(y)-1

print(system.time({
rData <- array(0,c(73,144))   # array to store results
   for (i in 1:73) {
        for (j in 1:144) {
              rData[i,j] <- cor(slp[,i,j],y)
        }
    }
}))

print(system.time({
n.1<-length(y)-1
mean.slp<-apply(slp,c(2,3),mean)
mean.y<-mean(y); sy<-var(y)^0.5
sqslp<-apply(slp*slp,c(2,3),sum)/n.1-mean.slp^2*n/n.1
sslpy<-apply(slp*y,c(2,3),sum)/n.1-mean.slp*mean.y*n/n.1
rslpy<-sslpy/(sqslp^0.5*sy)
}))

print(all(round(100*rslpy)==round(100*rData)))

@
output-start
[1] 1.49 0.00 1.49 0.00 0.00
[1] 0.92 0.00 0.92 0.00 0.00
[1] TRUE
output-end

Peter Wolf
Uwe Ligges wrote: