[R] How to optimize this loop ?

Nicolas Prune np at alambic.org
Thu Jan 18 14:11:11 CET 2007


Dear R Users,

I request your help to optimize a loop.

Given a series of observations, I want to know how many consecutive past
observations are below the last one.

e.g :
my_series <- c(3, 4, 10,14,8,3,4,6,9)

As the last number (9)  is higher than the four preceding numbers (6, 4, 3, 8),
this function should return 4.

my_series <- c(3, 4, 10,14,8,3,4,11,9)
Here, it should return 0, as 9 is immediately preceeded by a higher number.

So far, I do this awful loop :

result <- 0
for (i in 1:length(my_series-1))
{
 if (my_series[length(my_series)-i]>end(my_series)[1])
{ result <- i-1 ; break }
}

I thing there's a better way...

my_series > my_series[end][1] returns :
TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE FALSE
, which seems more appealing (once the last "FALSE" is removed), but now, how to
know the size of the last consecutive series of "TRUE" ?

Can you see a better way ?

Thanks.



More information about the R-help mailing list