首页 > 解决方案 > Monty Hall In R - setdiff 出乎意料的结果

问题描述

我正在用 R 编写一个程序来模拟这里解释的蒙蒂霍尔问题,https://www.youtube.com/watch?v= 4Lb-6rxZxx0

考虑这段代码,sample(setdiff(doors, c(pick, car)),1)“应该”每次都是 3,但事实并非如此。

doors <- 1:3
pick <- 2
car <- 1
sample(setdiff(doors, c(pick, car)),1)
[1] 3
sample(setdiff(doors, c(pick, car)),1)
[1] 1

知道我哪里出错了吗?

谢谢你。

标签: rsampledo.callset-difference

解决方案


你的问题是你最终打电话sample.int

doors <- 3L
pick <- sample(doors, 1)
car <- sample(doors, 1)
class(setdiff(doors, c(pick, car)))
#R [1] "integer"

length(setdiff(doors, c(pick, car)))
#R [1] 1

help("sample.int")

body(sample)
#R {
#R    if (length(x) == 1L && is.numeric(x) && is.finite(x) && x >= 
#R         1) {
#R         if (missing(size)) 
#R            size <- x
#R         sample.int(x, size, replace, prob)
#R     }
#R    else {
#R        ...

除非您的集合中有多个变量,否则抽样没有意义。


推荐阅读