0

有一个例子说,一个国王在一个盒子里放了两把匕首,盒子可能是金色的,也可能是银色的。我知道第一部分是在框中模拟所有三种可能的结果。

set.seed(20202020)
    boxes <- sample(c('GG','SS','GS'),
                size=10^5,replace=T,prob=c(1/3,1/3,1/3))
    table(boxes)/10^5`
## boxes
##      GG      GS      SS 
## 0.33333 0.33413 0.33254

但我对第二部分感到困惑。我知道as.numeric(as.factor(boxes))将“GG”“GS”“SS”的结果变成数字1、2、3;我不明白这条线的目的是什么:prob=c(1,.5,0)[as.numeric(as.factor(boxes))]. 它似乎在概率中产生了三个值,但这是一个二项式模拟,所以我无法弄清楚。

dagger <- rbinom(10^5,size=1,prob=c(1,.5,0)[as.numeric(as.factor(boxes))])
4

1 回答 1

0

因此,正如您所指出的,prob它通常是 0 到 1 之间的单个数字。但是,如果您给它一个向量,它会依次应用该向量直到它到达末尾,然后再次从头开始应用它。

例如,代码rbinom(n=3, size=10, prob = c(1,0))会给出 results c(10,0,10)。那么,让我们看看有什么c(1,.5,0)[as.numeric(as.factor(boxes))]作用。如果 x 是向量,则x[c(1,2,1)]返回 x 的第一个元素,然后是第二个元素,然后再次返回第一个元素。所以c(1,.5,0)[as.numeric(as.factor(boxes))]用以下规则替换向量框中的每个实例:GG 替换为 1,GS 替换为 0.5,SS 替换为 0。

换句话说,代码作为一个整体所做的是首先创建一个框列表。然后,根据盒子的类型,调整匹配成功的概率。如果是GG盒,那么它保证会有一个肯定的结果。如果它是一个 GS 盒子,那么它只能保证 50% 的时间是肯定的结果。如果你得到一个 SS 盒子,那么你肯定什么也得不到。每次获得匕首时,Dagger 都会列出 1,如果没有,则为 0。

于 2022-02-03T00:34:46.970 回答