長さ 7 のベクトル x を置換してサンプリングし、そのベクトルを 10 回サンプリングしたいと思います。次のようなことを試しましたが、探している結果の 7x10 出力を取得できません。これにより 1x7 ベクトルが生成されますが、他の 9 つのベクトルを取得する方法がわかりません
x <- runif(7, 0, 1)
for(i in 1:10){
samp <- sample(x, size = length(x), replace = T)
}
長さ 7 のベクトル x を置換してサンプリングし、そのベクトルを 10 回サンプリングしたいと思います。次のようなことを試しましたが、探している結果の 7x10 出力を取得できません。これにより 1x7 ベクトルが生成されますが、他の 9 つのベクトルを取得する方法がわかりません
x <- runif(7, 0, 1)
for(i in 1:10){
samp <- sample(x, size = length(x), replace = T)
}
これは、これを行うための非常に便利な方法です。
replicate(10,sample(x,length(x),replace = TRUE))
置換を使用してサンプリングしたいように見えるので、一度に 7*10 個のサンプルを取得できます (サイズが大きい場合はより効率的です)。
x <- runif(7)
n <- 10
xn <- length(x)
matrix(x[sample.int(xn, xn*n, replace=TRUE)], nrow=xn)
# Or slightly shorter:
matrix(sample(x, length(x)*n, replace=TRUE), ncol=n)
2 番目のバージョンはsample
直接使用しますが、これにはいくつかの問題があります:x
が長さ 1 の数値の場合、悪いことが起こります。sample.int
より安全です。
x <- c(pi, -pi)
sample(x, 5, replace=T) # OK
x <- pi
sample(x, 5, replace=T) # OOPS, interpreted as 1:3 instead of pi...
適切な答えが得られたようですが、最初の試みと同様のアプローチを次に示します。違いは、適切なディメンションで定義samp
してから、そのオブジェクトに繰り返しインデックスを付けて、一度に 1 行ずつ入力することです。
samp <- matrix(NA, ncol = 7, nrow = 10)
for(i in 1:10){
samp[i,] <- sample(x, size = length(x), replace = T)
}