Hi Andy,

Take a look at the rollapply function in the zoo package.

> require(zoo)
Loading required package: zoo
> x <- 1:4
> rollapply(zoo(x), 1, sum)
1 2 3 4
1 2 3 4
> rollapply(zoo(x), 2, sum)
1 2 3
3 5 7
> rollapply(zoo(x), 3, sum)
2 3
6 9
> rollapply(zoo(x), 4, sum)
 2
10

# all at once
sapply(1:4, function(r) rollapply(zoo(x), r, sum))


HTH,
Jorge


On Fri, Apr 2, 2010 at 2:24 PM, Andy Rominger <> wrote:

> Hello,
>
> I'd like to take all possible sub-summands of a vector in the quickest and
> most efficient way possible.  By "sub-summands" I mean for each sub-vector,
> take its sum.  Which is to say: if I had the vector
>
> x<-1:4
>
> I'd want the "sum" of x[1], x[2], etc.  And then the sum of x[1:2], x[2:3],
> etc.  And then...so on.
>
> The result would be:
> 1 2 3 4
> 2 5 7
> 6 9
> 10
>
> I can do this with for loops (code below) but for long vectors (10^6
> elements) looping takes more time than I'd like.  Any suggestions?
>
> Thanks very much in advance--
> Andy
>
>
> # calculate sums of all sub-vectors...
> x <- 1:4
>
> sub.vect <- vector("list",4)
>
> for(t in 1:4) {
>    maxi <- 4 - t + 1
>    this.sub <- numeric(maxi)
>    for(i in 1:maxi) {
>        this.sub[i] <- sum(x[i:(i+t-1)])
>    }
>    sub.vect[[t]] <- this.sub
> }
>
> sub.vect
>
>        [[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
> and provide commented, minimal, self-contained, reproducible code.
>

        [[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
and provide commented, minimal, self-contained, reproducible code.

Reply via email to