9

2 つのサイコロを振ることをシミュレートしようとしています。私が使用した:

d2 <- sample(1:6, 10^6, replace = T) + sample(1:6, 10^6, replace = T)

そして期待される結果を得る。私も試しました

s2d <- c()
for (i in 1:6) { 
  for (j in 1:6){ 
    s2d <- c(s2d, (i+j)) 
  } 
}
d2 <- sample(s2d, 10^6, replace=T)

それも機能しますが、これらは少し「力ずく」に感じます。それを行うためのより簡単でエレガントな方法はありますか?

より一般的に言えば、2 つ (またはそれ以上) の独立したイベントを取り、それらに対して操作 (加算、乗算) を行う関数はありますか?

4

3 に答える 3

15

If your issue is that you can't roll any arbitrary number of dice, something like:

rowSums(replicate(2, sample(6, 10^6, replace=T)))

Would be more flexible.

于 2013-02-11T20:28:20.603 に答える
3

あなたの最初の選択肢に特に問題はないようだという David の意見に同意します。あなたが本当に2つのサイコロの合計の直後にいるなら、別の方法はこれかもしれません:

sample(2:12,size = 100,replace = TRUE, prob = table(outer(1:6,1:6,"+")) / 36)
于 2013-02-11T20:31:18.593 に答える
3

TeachingDemos パッケージには、サイコロの転がりをシミュレートする関数がありdiceます (結果をプロットするオプションもありますが、1000 回のロールでは意味のあるプロットにはなりません)。これは力ずくではないように思えるかもしれませんが、内部的には既に投稿されているものと同様のことを行います。apply または関連する関数を使用して、戻り値の列全体の合計などを実行できます。

于 2013-02-11T21:21:33.437 に答える