我必须在R中创建一个蒙特卡罗模拟。我模拟连续100次滚动一对骰子。我应该看到通常会发生总和为7的第一次滚动。当滚动总和为7的第一个滚动时,我想存储这个数字,然后找到平均值。我将运行模拟100,000次,然后使用平均值来查看掷骰子通常需要多长时间。我在存储此值时遇到问题。这是一些peuedocode:
set.seed(101)
trials<-4 ## will later change to 100,000
for(j in 1:trials){
n=0 ## number of rolls
while(n<100){
n=n+1
result<-sum(sample(1:6,2,replace=TRUE)) ## rolling the dice
if(result==7) ## if sum is 7, print
print(n) ### not sure how to store the n value
##to an array which i can later average
break
}
对此的任何帮助将不胜感激。谢谢
答案 0 :(得分:1)
理论上,你可能需要超过100次试验才能达到7的总和(它不太可能发生,但仍然可能)。因此,最好使用while (TRUE)
这样做:
set.seed(101)
ntrials <- integer(1e+5)
for (i in seq_along(ntrials)) {
n <- 0
# Roll the dices until the sum is 7.
while (TRUE) {
n <- n + 1
current.result <- sum(sample(1:6, 2, replace=T))
if (current.result == 7) {
ntrials[i] <- n
break
}
}
}
必要试验的数量将存储在ntrials
。