假设我有一个整数向量:
> a<-sample(1:100,10)
> a
[1] 13 23 97 70 63 32 82 31 15 36
我想要一个包含此向量的累积值的向量。也就是说,我想要矢量
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
这有效,但我想知道是否有更好的方法来做到这一点。有吗?
(这可能是一个不好的例子,但一般来说,是否有一种方法可以访问被迭代的列表元素,因为您知道这些元素相对于当前元素的位置?)
答案 0 :(得分: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