I'll add my suggestion, which first extracts from x the elements up to but not including the first positive one and then sums them: f3 <- function(x) { sum(x[cumsum(x>0) == 0]) } Michaels suggestion was sum(x[seq_len(which.max(x > 0)]) but that includes the first positive element so I think it should be at least f1 <- function(x) sum(x[seq_len(which.max(x>0)-1)]) (but that still fails in some cases). Jeff's was f2 <- function (x) { tmp <- aggregate(x, list(lvl = cumsum(abs(diff(c(FALSE, x > 0))))), FUN = sum) tmp[0 == tmp$lvl, "x"] }
To test them, make a list of datasets > xs <- list(allNeg=c(-1, -3, -9), allPos=c(1,3,9), firstPos=c(1,-3,-9), > firstNeg=c(-1,-3,+9), misc=c(-1,-3,9,-27,-81)) > sapply(xs, function(x)try(f1(x))) allNeg allPos firstPos firstNeg misc 0 0 0 -4 -4 > sapply(xs, function(x)try(f2(x))) $allNeg [1] -13 $allPos numeric(0) $firstPos numeric(0) $firstNeg [1] -4 $misc [1] -4 > sapply(xs, function(x)try(f3(x))) allNeg allPos firstPos firstNeg misc -13 0 0 -4 -4 Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf > Of Jeff Newmiller > Sent: Tuesday, August 07, 2012 10:25 AM > To: R. Michael Weylandt; number10 > Cc: r-help@r-project.org > Subject: Re: [R] Sum of vector elements > > Another approach... not exactly more direct, but perhaps more robust and more > general: > > tmp <- aggregate(x,list(lvl=cumsum(abs(diff(c(FALSE,x>0))))), FUN=sum) > ans <- tmp[0==tmp$lvl,"x"] > > abs(diff()) finds transitions, FALSE forces level zero to represent negative > numbers > cumsum marks levels (groups of positive and not-positive numbers) > aggregate does the summation > ans may be empty if x started with positive numbers. > --------------------------------------------------------------------------- > Jeff Newmiller The ..... ..... Go Live... > DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... > Live: OO#.. Dead: OO#.. Playing > Research Engineer (Solar/Batteries O.O#. #.O#. with > /Software/Embedded Controllers) .OO#. .OO#. rocks...1k > --------------------------------------------------------------------------- > Sent from my phone. Please excuse my brevity. > > "R. Michael Weylandt" <michael.weyla...@gmail.com> wrote: > > >I'd do something like this: > > > >x <- sample(seq(-10, 10)) > > > >sum(x[seq_len(which.max(x > 0)]) > > > >Though others might have more direct solutions. > > > >which.max() gets you the index of the first time x > 0 -- seq_len > >gives you numbers 1 to that index -- then just subset and sum like > >normal. > > > >Best, > >Michael > > > >On Tue, Aug 7, 2012 at 7:37 AM, number10 <havana_dr...@ymail.com> > >wrote: > >> Hi, Is it possible to avoid using do and while loops to calculate the > >sum of > >> the elements of a vector until the appearance of the first positive > >element. > >> > >> > >> > >> -- > >> View this message in context: > >http://r.789695.n4.nabble.com/Sum-of-vector-elements-tp4639395.html > >> Sent from the R help mailing list archive at Nabble.com. > >> > >> ______________________________________________ > >> 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. > > > >______________________________________________ > >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. > > ______________________________________________ > 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. ______________________________________________ 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.