ディスカリマー: (非常に非効率なソリューションです。mnel/Gavin のソリューションを参照してください)
多くの、多くの、..各回答の下にある多くのコメントを読むことができるように、この回答は、フォーラムの礼儀を維持するという精神で、OPの特定の質問に答えようとします(ただし、彼の要件はおそらく非効率的です)。 ) は、質問の趣味が悪く、私の回答はフォーラムの要件を正当化していないと指摘しました。私はすべての批判を受け入れ、明らかな理由(回答としてマークされている、継続性)のためにのみここに回答を残します。この特定のベクトル化されたソリューションについては、mnel/Gavin の回答を参照することをお勧めします。問題。for-loop の実装に興味がある場合は、この投稿の下部を参照してください。ただし、for-loop の構造を知るためにそれを参照することをお勧めしますが、この特定の for-loop を実装しないでください。問題。ありがとうございました。
あなたのコードは、@ Joshuaがすでに述べた主な問題を除いて、かなりの数の問題でいっぱいです:
最初に、ループ内で X と Y の値を毎回書き直すので、ループの最後には、合計される Y の最後の値だけが残ります。
第二に、あなたのコードY
は正しくありません。あなたは、x
コイントスの数を獲得しなければならないと言いますが、それでも、あなたは を使いますsample(2, 1, ...)
。は、ダイスロールの数字に等しい1
ものに置き換える必要があります。X
代わりに次のコードを試してください。
Youtcomes <- sapply(1:100, function(x) {
X <- sample(1:6, 1, replace=TRUE, rep(1,6)/6)
Y <- sample(c("H", "T"), X, replace=TRUE, rep(1,2)/2)
sum(Y == "T")
})
ここでは、100 回ループし、そのたびに 1 ~ 6 の値をサンプリングして X に格納します。次に、head
(H) またはtail
(T)X
回サンプリングして Y に格納します。
ここで、sum(Y == "T")
x の現在の値の合計 (1 <= x <= 100) を返します。したがって、最後に、Youtcomes
シミュレートされたY == Tail
値のセットになります。
次に、を行うことができますhist(Youtcomes)
。
編集:必要なforループソリューションの場合、
# always assign the variable you'll index inside for-loop
# else the object will keep growing every time and a copy of
# entire object is made for every i, which makes it extremely
# slow/inefficient.
Youtcomes <- rep(0, 100)
for (i in 1:100) {
X <- sample(1:6, 1, replace=TRUE, rep(1,6)/6)
Y <- sample(c("H", "T"), X, replace=TRUE, rep(1,2)/2)
# assign output inside the loop with [i] indexing
Youtcomes[i] <- sum(Y == "T")
# since Youtcomes is assigned a 100 values of 0's before
# the values will replace 0' at each i. Thus the object
# is not copied every time. This is faster/efficient.
}