R中针对Monty Hall问题的Monte Carlo模拟无法正常工作吗?

Sah*_*ngh 4 simulation r probability data-science

我正在用R编写一个函数,以对Monty Hall问题进行蒙特卡洛模拟。当门没有开关时该功能起作用switch == FALSE,但是当我打电话时mean(replicate(10000, monty_hall(switch = TRUE))),预期的答案差不多了,0.66但是我却绕开了0.25

这是该函数的代码:

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
        }
}
Run Code Online (Sandbox Code Playgroud)

我应该进行哪些更改以获取正确的输出0.66

bpb*_*tti 5

只需将门矢量更改为字符

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
   }
}
Run Code Online (Sandbox Code Playgroud)

假设该人选择了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进行采样。请注意,当x在诸如sample(x)之类的调用中具有不同长度时,此便利功能可能会导致不良行为

我认为最简单的解决方法是更改​​为字符,但是如果必须使用数字值,则只需检查向量的长度,然后返回该值(如果为1),否则可以执行示例