> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Rheannon
> Sent: Tuesday, July 22, 2008 9:09 AM
> To: r-help@r-project.org
> Subject: Re: [R] how to speed up this for loop?
> 
> 
> 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])}}
> 

Using sum for a matrix name was very confusing to my eyes trying to 
differentiate square brackets from parentheses.  You may have even confused 
yourself.  However, does this get you close to what you want?

#sum values between FN and LN, excluding positive values
for(i in 1:R){
  sum[i] <- sum(Temp[i,Temp[I,FN[i]:LN[i]]>0]) }
 
Hope this helpful,

Dan

Daniel J. Nordlund
Washington State Department of Social and Health Services
Planning, Performance, and Accountability
Research and Data Analysis Division
Olympia, WA  98504-5204
 
 

______________________________________________
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