Hi all, as I am trying to move slowly from just "working" to "good" code, I'd like to ask if there's a smarter way than using a for-loop in tasks like the example below.
I need to obtain the extrema of the cumulated sum of a detrended time series. The following code is currently used, please have a look at the comments for my questions and remarks: system.time({ X <- rnorm(10000) X.length <- length(X) X.cum.sum <- cumsum(X) X.cum.mean <- cummean(X) # initializing the "output" vectors X.min.detrended <- rep(NA,X.length) X.max.detrended <- rep(NA,X.length) for (i in 1:X.length) { # Detrending of the time series from index 1 to i # I think that's the time consuming part, are there any # suggestions how to do this faster? X.cum.sum.detrended <- X.cum.sum[1:i]-seq(1:i)*X.cum.mean[i] # Calculating the min and max. Would a "range" be smarter here? X.min.detrended[i] <- min(X.cum.sum.detrended) X.max.detrended[i] <- max(X.cum.sum.detrended) # As the programs takes rather long to complete I would like to # get information about the progress. Any better way to do this # than a cat(paste(i,"...",""))? } }) As you can see this takes rather long even for this relative small sample: [1] 41.11 0.97 45.14 NA NA I considered using "sapply", but expected problems with memory size as a lot more values have to be kept in memory (the typical length of X is 10^6 - 10^7). Thanks again for your patience with newbies like me :) Regards Oliver ______________________________________________ R-help@stat.math.ethz.ch 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.