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]]