2016-04-27 22 views
1

Rでモンテカルロシミュレーションを作成する必要があります。100回連続して1つのサイコロをシミュレートしています。私は最初に合計が7になるロールがいつ発生するのかを見ています。最初のロールの合計が7になると、この数値を保存して後で平均を求めます。私はシミュレーションを10万回実行し、その平均を使って通常は7の合計でサイコロを振るのにかかる時間を確認します。この値を保存するのに問題があります。ここにいくつかのコードがあります:Rを格納するループの場合

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

'trials < - rep(NA、4)'に 'trials < - 4'を変更し、ループ内で' trials [j] <-n'を使用します。ループ条件は、for(j in 1:length(trial))となります。 – Gopala

+0

@Gopala forループは、コードが動作するための 'for(j in 1:length(trial))'として変更する必要があります。 –

+0

私は、その必要性が変わったことを知った後に簡単に編集することができたとは言いました。 – Gopala

答えて

1

理論的には、合計が7に達するまでに100回以上の試行が必要な場合があります(起こる可能性は低いですが、それでも可能です)。だから、このような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に保存されます。

関連する問題