#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!