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?
只需将门矢量更改为字符
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),否则可以执行示例