对于游戏设计问题,我需要更好地检查二项分布。使用 R ,我需要构建一个二维表 - 给定一个固定参数'pool'(掷骰子的数量),'sides'(骰子的边数)具有:< / p>
我知道如何将它计算为单个任务,但我不确定如何迭代填充整个表格
编辑:我忘了说我想计算获得至少成功次数的概率p。
答案 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))