4

整数のベクトルがあるとしましょう:

> 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が必要です。

これを実現する 1 つの方法は、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

これは機能しますが、これを行うためのより良い方法があるかどうか疑問に思っていました。ある?
(これは悪い例かもしれませんが、一般的に、現在の要素に対するこれらの要素の位置がわかっている場合、反復されているリストの要素にアクセスする方法はありますか?)

4

1 に答える 1

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
于 2012-12-19T05:42:37.187 に答える