Просто измените вектор дверей на символы
monty_hall = function(switch = logical()){
doors <- c("1","2","3")
names(doors) <- rep(c("goat", "car"), c(2,1))
prize_door <- doors[3]
guess <- sample(doors, 1)
revealed_door <- sample(doors[!doors %in% c(guess, prize_door)],1)
if(switch){
switched_door <- sample(doors[!doors %in% c(guess, revealed_door)],1)
prize_door == switched_door
} else {
prize_door == guess
}
}
Предположим, что человек выбрал дверь № 1, а приз - в двери № 2, так что осталось открыть дверь № 3.
У вас будет revealed_door <- sample(3,1)
, и это не сработает, как вы ожидаете, это станет revealed_door <- sample(c(1,2,3),1)
Из документации по функции просто наберите ?sample
Если x имеет длину 1, является числовым (в смысле is.numeric) и x> = 1,
выборка через образец происходит от 1: x. Обратите внимание, что это удобство
функция может привести к нежелательному поведению, когда х имеет разную длину в
вызовы, такие как sample (x)
Я думаю, что самое простое исправление - это изменение символов, но если вам нужно использовать числовые значения, просто проверьте длину вектора и верните значение, если оно равно 1, или выполните выборку в противном случае