2016-04-27 34 views
0

forループに配列を追加しようとしました。 しかし、繰り返しごとに私のループは上書きされます。 どうすれば解決できますか?forループ内にforループの配列を追加する

rnormRdn <- matrix() #init empty matrix set.seed(1234) 
set.seed(1234) 
    for(i in 1:3){ 
    rnormRdn <- matrix(rnorm(n = 4), nrow = 2, ncol = 2) 
    print("New random matrix that should be appended is:") 
    print(rnormRdn) 
    appendMat <- array(data = rnormRdn, dim = c(2,2,i)) 
    print("New random matrix not correctly apended on after first iteration:") 
    print(appendMat) 
    i <- i+1 
    } 

結果:最後の繰り返しで

[1] "New random matrix that should be appended is:" 
      [,1]  [,2] 
[1,] -1.2070657 1.084441 
[2,] 0.2774292 -2.345698 
[1] "New random matrix not correctly apended on after first iteration:" 
, , 1 

      [,1]  [,2] 
[1,] -1.2070657 1.084441 
[2,] 0.2774292 -2.345698 

[1] "New random matrix that should be appended is:" 
      [,1]  [,2] 
[1,] 0.4291247 -0.5747400 
[2,] 0.5060559 -0.5466319 
[1] "New random matrix not correctly apended on after first iteration:" 
, , 1 

      [,1]  [,2] 
[1,] 0.4291247 -0.5747400 
[2,] 0.5060559 -0.5466319 

, , 2 

      [,1]  [,2] 
[1,] 0.4291247 -0.5747400 
[2,] 0.5060559 -0.5466319 

[1] "New random matrix that should be appended is:" 
      [,1]  [,2] 
[1,] -0.5644520 -0.4771927 
[2,] -0.8900378 -0.9983864 
[1] "New random matrix not correctly apended on after first iteration:" 
, , 1 

      [,1]  [,2] 
[1,] -0.5644520 -0.4771927 
[2,] -0.8900378 -0.9983864 

, , 2 

      [,1]  [,2] 
[1,] -0.5644520 -0.4771927 
[2,] -0.8900378 -0.9983864 

, , 3 

      [,1]  [,2] 
[1,] -0.5644520 -0.4771927 
[2,] -0.8900378 -0.9983864 

期待される結果:

[1] "New random matrix not correctly apended on after first iteration:" 
, , 1 

      [,1]  [,2] 
[1,] -1.2070657 1.084441 
[2,] 0.2774292 -2.345698 

, , 2 

      [,1]  [,2] 
[1,] 0.4291247 -0.5747400 
[2,] 0.5060559 -0.5466319 

, , 3 

      [,1]  [,2] 
[1,] -0.5644520 -0.4771927 
[2,] -0.8900378 -0.9983864 
+0

なぜ新しい値を変数に代入すると古い値が消えてしまうのか分かりません。おそらく、(すべての反復をサポートするのに十分な次元で)forループの外側に配列を定義し、 'appendMat [,, i] < - ...'のような部分集合の代入を行うことを考えてください。おそらくよりエレガントな方法がありますが、これはうまくいくはずです。 – r2evans

+0

1つの代わりに追加する理由'set.seed(1234);行< - cols < - 2; z←3; array(rnorm(rows * cols * z)、dim = c(rows、cols、z)) ' – rawr

答えて

1

次のことを試してみてください。

set.seed(1234) 
# initialize array, giving dimensions 
myArray <- array(0, dim=c(2,2,3)) 

for(i in 1:3){ 
    rnormRdn <- matrix(rnorm(n = 4), nrow = 2, ncol = 2) 
    print("New random matrix that should be appended is:") 
    print(rnormRdn) 
    myArray[,,i] <- rnormRdn 
    print("New random matrix not correctly apended on after first iteration:") 
    print(myArray) 
} 

アレイのサイズを事前に知っていれば、2行目と同じようにスペースをあらかじめ割り当てておく方がずっと効率的です。

+0

ありがとうございます。それは私が探していたものです。 – S12000