An embedded and charset-unspecified text was scrubbed... Name: not available Url: https://stat.ethz.ch/pipermail/r-help/attachments/20040107/0e04c0bf/attachment.pl
3-dimensional looping Q.
3 messages · Maurice McHugh, Uwe Ligges, Peter Wolf
Maurice McHugh wrote:
Hello everyone-
I have a 3-d array with the 1st dimension being monthly mean data that
I would like to correlate with some time series index, for example, and
save the coefficients in an array.
The code I am currently running is....
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)
}
}
Rather than running this analysis embedded with two outer loops, are =
there any more efficient ways of doing this?
Many thanks!
Don't know whether it's more efficient: You can try to apply() the function rcorr() in package "Hmisc" to your problem... Uwe Ligges
Maurice Maurice McHugh Department of Geography and Anthropology Louisiana State University Baton Rouge, LA [[alternative HTML version deleted]]
______________________________________________ R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
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:
Maurice McHugh wrote:
Hello everyone-
I have a 3-d array with the 1st dimension being monthly mean data that
I would like to correlate with some time series index, for example,
and save the coefficients in an array.
The code I am currently running is....
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)
}
}
Rather than running this analysis embedded with two outer loops,
are =
there any more efficient ways of doing this?
Many thanks!
Don't know whether it's more efficient: You can try to apply() the function rcorr() in package "Hmisc" to your problem... Uwe Ligges
Maurice
Maurice McHugh
Department of Geography and Anthropology
Louisiana State University
Baton Rouge, LA
[[alternative HTML version deleted]]
______________________________________________ R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
______________________________________________ R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html