Rでベクトルの累積和ベクトルを求める

累積和ベクトルとは

サイズ n のベクトル x の累積和ベクトルを以下のように定義する。

ベクトル x
  x1
  x2
  ...
  xn

累積和ベクトル
  x1
  x1 + x2
  ...
  x1 + x2 + ... xn

base パッケージの cumsum 関数を使う

x <- c(1, 2, 3)
> cumsum(x)
[1] 1 3 6

自分で実装する

累積和ベクトルの各成分は、ベクトルxの成分の線形和である。したがって、下三角行列とベクトル x を乗算すれば累積和ベクトルが求められる。
下三角行列は lower.tri 関数で生成する。第1引数 x には、生成したい下三角行列と同じ行数・列数を持つ matrix を指定する。このとき、 matrix の各成分は何でもよい。第2引数 diag には、下三角行列の対角成分を TRUE とするか、 FALSE (デフォルト)とするかを指定する。今回のように累積和を計算する場合は、 TRUE を指定する。

> lower.tri(matrix(1, nrow = 3, ncol = 3), diag = TRUE)
     [,1]  [,2]  [,3]
[1,] TRUE FALSE FALSE
[2,] TRUE  TRUE FALSE
[3,] TRUE  TRUE  TRUE

上記の下三角行列とベクトル x を乗算すれば、累積和ベクトルが求められる。行列の乗算には %*% 演算子を使う。演算結果は matrix で返るため、 vector が欲しければ as.vector 関数で vector に変換する。

> x <- c(1, 2, 3)
> as.vector(lower.tri(matrix(0, nrow = 3, ncol = 3), diag = TRUE) %*% x)
[1] 1 3 6