Монте-Карло для 3 или более последовательных граней

#r #statistics #montecarlo

#r #Статистика #монтекарло

Вопрос:

Я написал этот код, чтобы проверить наличие 3 или более последовательных граней в симуляции из 100000 итераций с пятью бросками честного кубика. Я думаю, что это на правильном пути, но я что-то упускаю. Я продолжаю получать ошибку пропущенного значения:

 nrep = 500000
count = 0
for (i in 1:nrep) {
  roll = sample(6, 5)
  print(roll)
  if (roll[i] == roll[i 1] amp; roll[i 1] == roll[i 2]) count = count   1
}
print(count)
  

Пожалуйста, сообщите об исправлении, используя только базовое значение R.

Комментарии:

1. Вы индексируете что-то длиной 5 ( roll ) со значением, которое может быть таким же большим, как nrep . Я думаю о другом решении (которое будет опубликовано в качестве ответа через несколько минут). РЕДАКТИРОВАТЬ: вы также используете sample() usgin по умолчанию, который имеет replace=FALSE . Это означает, что вы никогда не увидите последовательных граней, потому что никакие числа не могут повторяться.

Ответ №1:

В дополнение к моему комментарию, вы можете использовать функцию rle() для вычисления длин и значений пробегов с равными значениями в векторе. Вы можете сделать что-то вроде следующего

 nrep = 500000
count = 0
for (i in 1:nrep) {
  roll = sample(6, 5, replace = TRUE)
  roll_rle = rle(roll)
  if (any(roll_rle$lengths >= 3)) {
    print(roll)
    count = count   1
  }
}
  

Комментарии:

1. Похоже, это работает так, как я и предполагал! Спасибо, @Tomas!