在R中绘制二项分布表

时间:2013-07-31 15:22:46

标签: r dice

对于游戏设计问题,我需要更好地检查二项分布。使用 R ,我需要构建一个二维表 - 给定一个固定参数'pool'(掷骰子的数量),'sides'(骰子的边数)具有:< / p>

  • 在行中 - &gt;成功的最小值(从0到不等,这是一个离散的分布)
  • 在列中 - &gt;成功次数(从0到池)

我知道如何将它计算为单个任务,但我不确定如何迭代填充整个表格

编辑:我忘了说我想计算获得至少成功次数的概率p。

2 个答案:

答案 0 :(得分:0)

这让你走了一半 你还没有真正展示你做过什么工作,但如果你是R的新手,你可能会错过一个非常强大的功能,你可以使用一个值向量作为另一个的索引。向量。这使问题的一部分变得容易。

pool <- 3
sides <- 20  # <cough>D&D<cough>


# you need to strore the values somewhere, use a vector
NumberOfRollsPerSide <- rep(0, sides)
names(NumberOfRollsPerSide) <- 1:sides # this will be useful in table

## Repeast so long as there are still zeros
##     ie, so long as there is a side that has not come up yet
while (any(NumberOfRollsPerSide == 0)) {
  # roll once
  oneRoll <- sample(1:sides, pool, TRUE)  

  # add (+1) to each sides' total rolls
  #  note that you can use the roll outcome to index the vector. R is great. 
  NumberOfRollsPerSide[oneRoll] <- NumberOfRollsPerSide[oneRoll] + 1
}

# These are your results: 
  NumberOfRollsPerSide

我希望这不是你的功课;) 你现在剩下要做的就是计算每一侧首次出现的卷号。您认为最好这样做吗?

答案 1 :(得分:0)

好的,我认为这可能是一个简单的解决方案。它具有行上的成功率和列上的骰子卷(p)上的成功阈值。

poolDistribution <- function(n, sides=10, digits=2, roll.Under=FALSE){
  m <- 1:sides
  names(m) <- paste(m,ifelse(roll.Under,"-", "+"),sep="")
  s <- 1:n
  names(s) <- paste(s,n,sep="/")
  sapply(m, function(m.value) round((if(roll.Under) (1 - pbinom(s - 1, n, (m.value)/sides))*100 else (1 - pbinom(s - 1, n, (sides - m.value + 1)/sides))*100), digits=digits))