Глядя на строку, где вы изменяете M
в вашем while
M[1 , A[1 , i + 1]] = M[1,A[1, i + 1]] + 1
, я вижу, что у вас есть A[1 , i + 1]
в качестве индекса. A
- это также матрица нулей, которую вы изменяете, как показано ниже:
A[1 ,i] <- min(max(rpois(1,20)-rbinom(1, A[ , i-1] , .4),0),20)
Таким образом, вы меняете значение A[1, i]
; однако вы используете A[1 , i + 1]
, когда хотите изменить M
. Поскольку вы не присвоили никаких значений, кроме i-й записи, A[1 , i + 1]
равно нулю.
Итак, вы получите:
M[1 , 0] = M[1, 0] + 1
Вот почему M
остается такой же. M[1 , 0]
равно numeric(0)
и M[1, 0] + 1
. Вы не присваиваете запись из M
и не присваиваете значение.
Чтобы обратиться к другому комментарию под постом, мы можем использовать print
и проверить, является ли условие для оператора if когда-либо встречались или нет:
while (i < 50) {
A[1,i] <- min(max(rpois(1,20)-rbinom(1, A[1,i-1], .4), 0), 20)
if (A[1, i] == 10) {
print(paste("i is equal to", i, "and A[1,i]==10 is TRUE"))
M[1, A[1, i + 1]] = M[1, A[1, i + 1]] + 1
}
i = i + 1
}
Вы увидите, что условие выполняется кучу раз.