所以这个代码是在我们学校发放的,它是众多例子之一(滚动公平骰子的模型)。
x<-runif(1)
y<-as.double(x<=c(1/6,2/6,3/6,4/6,5/6,1))*(1:6)
x<-min(y[y>0])
我无法理解这段代码与掷骰子的关系。
因此,第一行生成1个随机均匀的分布数x,介于0和1之间。 在第二行中,我们将一个条件放入x:如果它小于向量的1个组成部分(1 / 6,2 / 6,3 / 6,4 / 6,5 / 6,1),我们得到一个TRUE = 1,否则FALSE = 0。
然后将此结果乘以向量(1,2,3,4,5,6)。 最后,我们采用该向量积的最小值(必须大于零)。
我无法理解这背后的直觉。这里有人会介意解释这段代码与现实生活中掷骰子的关系。我很困惑..
答案 0 :(得分:1)
因此,对于掷骰子,每个数字具有相同的1/6概率。
现在做的是模拟滚动骰子。
因此,在第一行中生成0到1之间的随机数。
它所比较的间隔大小相同,长度为1/6。 因为,对于x来说,这些间隔中的一个间隔的概率是1/6。 那么在第三行中所做的就是查找x已经下降的区间。
让我们举一个例子: 假设x是0.25。 然后第二行的向量看起来像这样:
FALSE, TRUE, TRUE, TRUE , TRUE, TRUE
通过乘法得到:
0, 2, 3, 4, 5, 6
因此,最后x等于2.
所以最后x应该是骰子显示的数字
答案 1 :(得分:0)
本杰明基本上是你的代码说的
如果runif(1)= 0到1/6 = die roll = 1
runif(1)= 1/6至2/6 = die roll = 2
runif(1)= 2/6至3/6 = die roll = 3
等
因为第二行返回结果向量,x&lt; -min(y [y> 0])只返回第一个正值,即你的掷骰