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. ______________________________________________ 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.