For loops are really, really slow in R. In general, you want to avoid them
like the plague. If you absolutely must insist on using them in large,
computationally intense and complex code, consider implementing the relevant
parts in C, say, and calling that from R.

Staying within R, you can probably considerably speed up that code by
storing gx and gy as a multi-dimensional arrays. (e.g. for sample data,
something like

rawGy = sample( 1:240, 240^2* 241, replace = T)
rawGx = sample( 1:240, 240^2 *241, replace = T)
gx = array(rawGx, dim = c(length(s) - 1, 240,  max(rawGx)+1  ) )
gy = array(rawGy, dim = c(length(s) - 1, 240,  max(rawGy)+1 ) )

 ), in which case, you can easily do the computation without loops by

gxa = (gx[ ,a,1]+ 1)
gya =(gy[ ,a, 1] +1)
uv = gx[cbind(1:(length(s) - 1) , b, gxa)] / gx[cbind(1:(length(s) - 1) , a,
gxa)]  - gy[cbind(1:(length(s) - 1) ,b, gya)]/gy[cbind(1:(length(s) - 1) ,a,
gya)]

or similar, which will be enormously faster (on my computer, there's an over
30x speed up). With a bit of thought, I'm sure you can also figure out how
to let it vectorise in a, as well...

Zhou

--
View this message in context: 
http://r.789695.n4.nabble.com/For-calculation-is-so-slow-tp4630830p4630855.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to