有没有办法矢量化访问矢量的多个元素的操作?

use*_*678 4 loops r vectorization

假设我有一个整数向量:

> a<-sample(1:100,10)  
> a  
 [1] 13 23 97 70 63 32 82 31 15 36  
Run Code Online (Sandbox Code Playgroud)

我想要一个包含这个向量的累积值的向量.也就是说,我想要矢量
13 36 133 203 266 298 380 411 426 462

实现此目的的一种方法是使用for循环.我更喜欢使用apply/lapply/sapply/...来实现它,但我能想到的唯一方法是:

sapply(1:length(a), function(x) {sum(a[1:x])})
[1]  13  36 133 203 266 298 380 411 426 462
Run Code Online (Sandbox Code Playgroud)

这有效,但我想知道是否有更好的方法来做到这一点.在那儿?
(这可能是一个不好的例子,但一般来说,有没有办法访问被迭代的列表元素,因为你知道这些元素相对于当前元素的位置?)

Bra*_*sen 10

你可能会咯咯笑,但是已经有了内置函数,请参阅?cumsum

x <- sample(1:100,20)
x

 [1] 32 42 54 79 92 69 96 41 51 22 74 76 86 37 85 99  3 11 17 57

cumsum(x)

 [1]   32   74  128  207  299  368  464  505  556  578  652  728  814  851  936
[16] 1035 1038 1049 1066 1123
Run Code Online (Sandbox Code Playgroud)

  • 不会推荐它超过`cumsum`但是`Reduce('+',a,accumulate = TRUE)`可以做到这一点并且可以推广到其他二元运算符. (6认同)