0

行列を掛けようとしています。行列内の値は、サイクルごとに異なる確率を表します。したがって、ループを使用してマトリックス内の値を更新します。最初は問題なく動作しますが、フィードバックが得られます。添え字が境界を超えています。エラー メッセージに、次の値 [4,] 210、323、467 が表示されています。下部に表示されないのはなぜですか?

> initial_patient_distribtion <- c (1000,0,0)
> aaa <- c(1,0.7,0.6,0.5,0.4)
> bbb <- c(1, 0.2,0.3, 0.4, 0.5)
> ccc <- c(1, 0.1,0.1,0.1,0.1)
> 
> cycle_patient_distribution_dasa_no2nd[1,] <-initial_patient_distribtion
>  for (i in 2:length(aaa)){ 
+ trans_matrix_dasa_no2nd <- matrix (,nrow=3,ncol=3)
+ trans_matrix_dasa_no2nd[1,] <- c(aaa[i],bbb[i],ccc[i])
+ trans_matrix_dasa_no2nd[2,] <- c(0,0.5,0.5)
+ trans_matrix_dasa_no2nd[3,] <- c(0,0,1)
+ 
+ cycle_patient_distribution_dasa_no2nd[i,] <- cycle_patient_distribution_dasa_no2nd[i-1,]%*%(trans_matrix_dasa_no2nd)}
Error in `[<-`(`*tmp*`, i, , value = c(210, 323, 467)) : 
  subscript out of bounds
> 
> cycle_patient_distribution_dasa_no2nd
         [,1] [,2] [,3]
[1,] 1000    0    0
[2,]  700  200  100
[3,]  420  310  270
4

1 に答える 1

1

あなたのforループはlength(aaa)(5)に行き、 cycle_patient_distribution_dasa_no2nd[i,]whenにアクセスしようとしますi==5cycle_patient_distribution_dasa_no2nd[5,]ただし、その行列の次元が 3x3 であるため、エラーがスローされることがわかります。

コードが別の方法で目的を達成する場合は、ループの終了インデックスforを 3 に変更するか、行列の次元を変更する必要があります。

trans_matrix_dasa_no2nd <- matrix (,nrow=length(aaa),ncol=3)
于 2013-08-01T22:33:54.300 に答える