模拟滚动两个骰子

时间:2013-02-11 20:23:57

标签: r

我正在尝试模拟滚动两个骰子。我用过:

d2 <- sample(1:6, 10^6, replace = T) + sample(1:6, 10^6, replace = T)

并获得预期结果。我也试过

s2d <- c()
for (i in 1:6) { 
  for (j in 1:6){ 
    s2d <- c(s2d, (i+j)) 
  } 
}
d2 <- sample(s2d, 10^6, replace=T)

这也有效,但这些感觉有点“蛮力”。有更简单,更优雅的方式吗?

更一般地说,是否有一个函数需要2个(或更多个)独立事件并对它们进行操作(加法,乘法)?

3 个答案:

答案 0 :(得分:14)

如果您的问题是您不能掷任意数量的骰子,例如:

rowSums(replicate(2, sample(6, 10^6, replace=T)))

会更灵活。

答案 1 :(得分:3)

我同意大卫的看法,你的第一个选择似乎没有什么特别的错误。另一种方法可能就是这样,如果你真的只是在两个骰子的总和之后:

sample(2:12,size = 100,replace = TRUE, prob = table(outer(1:6,1:6,"+")) / 36)

答案 2 :(得分:3)

在TeachingDemos包中有一个dice函数可以模拟骰子的滚动(甚至可以选择绘制结果,但是1000卷不会产生有意义的图)。这可能看起来不那么暴力,但在内部它确实类似于已发布的内容。您可以使用应用或相关函数来执行诸如在返回列之间求和之类的内容。