[R] how to speed up this for loop?

Rheannon rbrooks at uvic.ca
Tue Jul 22 18:08:59 CEST 2008


Here is the full code:

R <- 5328
#Temp is a temperature file with daily temp. values for each day of the
year, for 5328 locations
Temp <- rnorm(100)
dim(Temp) <- c(365,5328)
# transpose temp dataframe in order to perform rollmean (running mean) on
proper data section
Temp_T <- t(Temp)
library(zoo)
Temp_T <- zoo(Temp_T)

#**** 31 DAY RUNNING MEAN *********
RM <- rollmean(Temp_T, 31)

#function that finds first negative number, if there are none a value of 365
will be output
firstneg = function(x)if(any(x<0))min(which(x<0)) else 335

#apply the function to every column in Matrix
FN <- apply(RM,2,firstneg)

#problem: column values are off by 30 (31 day running mean)
FN <- matrix(FN) 
add = function(x)x=x+30
FN <- apply(FN,2,add)

#function that finds last negative number, if there are none a value of 365
will be output
lastneg = function(x)if(any(x<0))max(which(x<0)) else 335

#apply the function to every column in Matrix
LN <- apply(RM,2,lastneg)

#problem: column values are off by 30
LN <- matrix(LN) 
LN <- apply(LN,2,add)
RMT <- t(RM)

#Create and fill an empty matrix with zeros
sum <- matrix(nrow=R,ncol=1)
for(i in 1:R){sum[i] <- 0}

#******This is the loop that I would like to speed up************

#sum values between FN and LN, excluding positive values
for(i in 1:R){
for(j in FN[i]:LN[i]){
if(Temp[i,j]<0)
sum[i] <- sum[i] + sum(Temp[i,j])}}

-- 
View this message in context: http://www.nabble.com/how-to-speed-up-this-for-loop--tp18579577p18592932.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list