Test3 <- function(n,d) {
die1 = sample(1:d, n, replace = TRUE)
die2 = sample(1:d, n, replace = TRUE)
move = die1 + die2
position_before_roll = move
position_after_roll = move
jail = move
monopoly_sim = data.frame(position_before_roll,die1,die2,move,position_after_roll,jail)
monopoly_sim[1,1]=0
i = 1
for(i in 1:n){
#Needs to be position after roll + Dice Roll (Move)
monopoly_sim[i,5] = monopoly_sim[i,1] + monopoly_sim[i,4]
monopoly_sim[i+1,1] = monopoly_sim[i,5]
}
i=1
for(i in 1:n) {
if (monopoly_sim[i,1] + monopoly_sim[1,4] >= 39) {
monopoly_sim[i,5] = 0 + monopoly_sim[i,1] + monopoly_sim[i,4] - 39
monopoly_sim[i+1, 1] = monopoly_sim[i,5]
}
else {
monopoly_sim[i,5] = monopoly_sim[i,1] + monopoly_sim[i,4]
monopoly_sim[i+1, 1] = monopoly_sim[i,5]
}
}
i=1
for (i in 1:n) {
if (monopoly_sim[i,2] == monopoly_sim[i,3] && monopoly_sim[i+1,2] == monopoly_sim[i+1,3]
&& monopoly_sim[i+2,2] == monopoly_sim[i+2,3] && monopoly_sim[i+3,2] != monopoly_sim[i+3,3])
{monopoly_sim[i+2,6] = "Yes" }
else {monopoly_sim[i+2,6] = "No"}
}
return(monopoly_sim)
}
df = Test3(200,6)
x1= as.data.frame(df)
ここは私のコードです。この関数の目的は、データフレームを作成し、それに応じて値を設定することです。開始位置を0にして、ダイスロール1とダイスロール2を追加します。別の値に基づいてデータフレームを更新する際のエラー
私はposition_before_rollをequal(前の行のposition_after_roll)にしました。しかし、私が苦労しているところでは、私の「ボード」に39のポジションを持たせたいと思うので、39よりも大きなポジションに行くと、代わりにループします。試してこれを行うには、39より大きい値にして39を引いた後に設定します。
私の出力DFを見ても、必ずしもそうではありません。代わりに、時には39未満の値を減算して、負の数を作成します。
一般的なコメントとして、ループ内の変数として常に「i」を使用しないとコードを書くほうが簡単かもしれません。好きなもの(例えば 'j')を使うことができ、複数のループがあるときに役立ちます。 – zacdav