2017-01-16 7 views
0

私は少しの問題に遭遇し、サイコロをシミュレートしました。基本的には、ループとその出力に精通するためにこれをやっています。 意図は、次のように2つのサイコロの投げをシミュレートすることである:1 cathegorieの結果は(結果はサンプルでは発生しませんでした)0であればR - 放射サブサンプルのゼロを扱う

R = 100 
d6 = c(1:6) 
d = 60 
DICE = NULL 
for (i in 1:R) 
{ 
i <- as.factor((sample(d6, size=d, replace = T)) + (sample(d6, size=d, replace = T))) 
j <- summary(i) 
DICE = rbind(DICE, j) 
} 
head(DICE) 
HIS = colMeans(DICE) 
boxplot(DICE) 
title(main= "Result 2d6", ylab= "Throws", xlab="") 
relHIS = (HIS/sum(HIS))*100 
relHIS 

問題が発生します。最初のサブサンプルでこれがランダムに発生した場合、1つまたは複数のカテゴリ(番号2〜12)が欠落しています。これにより、次のサブサンプルで問題が発生します(「結果の列の数はベクトルの長さの倍数(arg 2)ではない」)。 これは本当に簡単な解決策です。事前にすべてを定義しておいてください...

ありがとうございました!ここにあなたの7行目で

答えて

0

省略as.factor()

+0

あなたは結果を見たことがありますか? – Roland

+0

整数、2と12の間の数字。次に、ボックスプロットを行うときに、それらを「要因」として考慮する必要があります。 – R18

+0

'summary'が数値入力のために生成するものを見てください。 – Roland

1

は、いくつかの修正です:

R = 100 
d6 = c(1:6) 
d = 60 
DICE = matrix(nrow = R, ncol = 11) #pre-allocate 
colnames(DICE) <- 2:12 

for (i in 1:R) 
{ 
    sim <- ordered((sample(d6, size=d, replace = T)) + (sample(d6, size=d, replace = T)), 
       levels = 2:12) #define the factor levels 
    sumsim <- table(sim) 
    DICE[i,] <- sumsim #sub-assign 
} 
head(DICE) 
HIS = colMeans(DICE) 
boxplot(DICE) 
title(main= "Result 2d6", ylab= "Throws", xlab="") 

prop.table(HIS) * 100 

は必ず結果データ構造を事前に割り当てます。ループでそれを成長させることはひどく遅く、どれくらいの大きさが必要か知っています。また、反復変数とそれ以外のシンボルには同じシンボルを使用しないでください。

関連する問題