Joris Meys
2010-May-04 15:29 UTC
[R] Avoiding for-loop for splitting vector into subvectors based on positions
Dear all, I'm trying to optimize code and want to avoid for-loops as much as possible. I'm applying a calculation on subvectors from a big one, and I get the subvectors by using a vector of starting positions: x <- 1:10 pos <- c(1,4,7) n <- length(x) I try to do something like this : pos2 <- c(pos, n+1) out <- c() for(i in 1:n){ tmp <- x[pos2[i]:pos2[i+1]] out <- c(out, length(tmp)) } Never mind the length function, I apply a far more complicated one. It's about the use of the indices in the for-loop. I didn't see any way of doing that with an apply, unless there is a very convenient way of splitting my vector in a list of the subvectors or so. Anybody an idea? Cheers -- Joris Meys Statistical Consultant Ghent University Faculty of Bioscience Engineering Department of Applied mathematics, biometrics and process control Coupure Links 653 B-9000 Gent tel : +32 9 264 59 87 Joris.Meys@Ugent.be ------------------------------- Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php [[alternative HTML version deleted]]
jim holtman
2010-May-04 15:50 UTC
[R] Avoiding for-loop for splitting vector into subvectors based on positions
Try this:> x <- 1:10 > pos <- c(1,4,7) > pat <- rep(seq_along(pos), times=diff(c(pos, length(x) + 1))) > split(x, pat)$`1` [1] 1 2 3 $`2` [1] 4 5 6 $`3` [1] 7 8 9 10 On Tue, May 4, 2010 at 11:29 AM, Joris Meys <jorismeys@gmail.com> wrote:> Dear all, > > I'm trying to optimize code and want to avoid for-loops as much as > possible. > I'm applying a calculation on subvectors from a big one, and I get the > subvectors by using a vector of starting positions: > > x <- 1:10 > pos <- c(1,4,7) > n <- length(x) > > I try to do something like this : > pos2 <- c(pos, n+1) > > out <- c() > for(i in 1:n){ > tmp <- x[pos2[i]:pos2[i+1]] > out <- c(out, length(tmp)) > } > > Never mind the length function, I apply a far more complicated one. It's > about the use of the indices in the for-loop. I didn't see any way of doing > that with an apply, unless there is a very convenient way of splitting my > vector in a list of the subvectors or so. > > Anybody an idea? > Cheers > -- > Joris Meys > Statistical Consultant > > Ghent University > Faculty of Bioscience Engineering > Department of Applied mathematics, biometrics and process control > > Coupure Links 653 > B-9000 Gent > > tel : +32 9 264 59 87 > Joris.Meys@Ugent.be > ------------------------------- > Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php > > [[alternative HTML version deleted]] > > ______________________________________________ > 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<http://www.r-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve? [[alternative HTML version deleted]]