我正在尝试增加矩阵。矩阵内的值表示每个循环不同的概率。因此,我使用循环来更新矩阵中的值。一开始它工作正常,但后来我得到反馈:下标超出边界。错误消息显示我的下一个值[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
答案 0 :(得分:1)
for
循环转到length(aaa)
(5),并在cycle_patient_distribution_dasa_no2nd[i,]
时尝试访问i==5
。但是,您会看到cycle_patient_distribution_dasa_no2nd[5,]
引发错误,因为该矩阵的尺寸为3x3。
如果您的代码完成了您想要的操作,那么您需要将for
循环中的结束索引更改为3,或者修改矩阵的维度:
trans_matrix_dasa_no2nd <- matrix (,nrow=length(aaa),ncol=3)