3

事前に生成されたプラス/マイナス 1 の行列 (100x3) を指定して、n=3 のランダム ウォーク パス (パス長 = 100) を作成するとします。最初のパスは 10 で始まり、2 番目は 20 で、3 番目は 30 で始まります。

set.seed(123)
given.rand.matrix <- replicate(3,sign(rnorm(100)))
path <- matrix(NA,101,3)
path[1,] = c(10,20,30)

for (j in 2:101) {
  path[j,]<-path[j-1,]+given.rand.matrix[j-1,]
}

最終値 (seed と rand 行列が与えられた場合) は 14、6、34 です...これは望ましい結果です...しかし...

質問: for ループをベクトル化する方法はありますか? 問題は、計算時にパス マトリックスがまだ完全に入力されていないことです。したがって、ループを置き換えると、 path[2:101,]<-path[1:100,]+given.rand.matrix ほとんどの NA が返されます。このタイプの for ループが R で回避可能かどうかを知りたいだけです。

事前にどうもありがとうございました。

4

1 に答える 1

6

確実にベクトル化可能: の初期化をスキップし、行列pathで使用します。cumsum

path <- apply( rbind(c(10,20,30),given.rand.matrix), 2, cumsum)

> head(path)
     [,1] [,2] [,3]
[1,]   10   20   30
[2,]    9   19   31
[3,]    8   20   32
[4,]    9   19   31
[5,]   10   18   32
[6,]   11   17   31
> tail(path)
       [,1] [,2] [,3]
[96,]    15    7   31
[97,]    14    8   32
[98,]    15    9   33
[99,]    16    8   32
[100,]   15    7   33
[101,]   14    6   34
于 2011-01-22T22:15:11.363 に答える