对于R存储值中的循环

时间:2016-04-27 02:56:50

标签: r simulation montecarlo

我必须在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
}

对此的任何帮助将不胜感激。谢谢

1 个答案:

答案 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