「バク=スネッペンのゲーム」は,ちゃんとプログラムできていない。
プログラムの仕様(ゲームのルール)がよく分からないので,書き直しできないなあ。
# 種の数
n <- 100
x <- runif(n, 0, 1)
z <- numeric(0)
# すべてを2/3以上にする操作
repeat {
x[0] <- 1 # R の添え字は 1 から始まる
x[n + 1] <- 1
xmin <- which.min(x) # xmin が 1 や n のときの処理はこれではだめ
if (x[xmin] < 2/3) { # x[0] には代入できないし,x[n+1] が最小になったら要素が n+1 に加わる
xr <- runif(3, 0, 1)
x[xmin - 1] <- xr[1]
x[xmin] <- xr[2]
x[xmin + 1] <- xr[3]
} else break
}
# sampleを100個
for (i in 1:100) {
y <- 0
# 最小のものにある値を代入
x[0] <- 1
x[n + 1] <- 1
xmin <- which.min(x)
xr <- runif(3, 0, 1)
x[xmin - 1] <- xr[1]
x[xmin] <- xr[2]
x[xmin + 1] <- xr[3]
# すべてを再び2/3以上に
repeat {
x[0] <- 1
x[n + 1] <- 1
xmin <- which.min(x)
if (x[xmin] < 2/3) {
xr <- runif(3, 0, 1)
x[xmin - 1] <- xr[1]
x[xmin] <- xr[2]
x[xmin + 1] <- xr[3]
y <- y + 1
} else break
}
z <- rbind(z, y) # y は 1 個の要素,z はベクトルなので,せめて z <- c(z, y)
} # しかし,それは間違った方法