# Re: [R] how to speed up this for loop?

From: Rheannon <rbrooks_at_uvic.ca>
Date: Tue, 22 Jul 2008 09:08:59 -0700 (PDT)

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)

#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)
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_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help