需要帮助来解释此代码

时间:2016-09-22 16:33:45

标签: r

所以这个代码是在我们学校发放的,它是众多例子之一(滚动公平骰子的模型)。

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)。 最后,我们采用该向量积的最小值(必须大于零)。

我无法理解这背后的直觉。这里有人会介意解释这段代码与现实生活中掷骰子的关系。我很困惑..

2 个答案:

答案 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])只返回第一个正值,即你的掷骰