[R] How do I avoid a loop?

Erik Iverson iverson at biostat.wisc.edu
Tue Jun 19 16:28:41 CEST 2007


One more variation on the solution, no idea how it compares in speed.

Using your x ...

 > ifelse(x, unlist(mapply(seq, to = rle(x)$lengths, from = 1)), 0)
[1] 1 2 3 0 0 1 2 0 1

Feng, Ken wrote:
> Hi,
> 
> I start with an array of booleans:
> 
> 	x <- c( TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE );
> 
> I want to define an y <- f(x) such that:
> 
> 	y <- c( 1, 2, 3, 0, 0, 1, 2, 0, 1 );
> 
> In other words, do a cumsum when I see a TRUE, but reset to 0 if I see a FALSE.
> 
> I know I can do this with a very slow and ugly loop or maybe use apply,
> but I was hoping there are some R experts out there who can show me
> a cleaner/more elegant solution?
> 
> Thanks in advance.
> 
> - Ken
> 
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list