12

長さ 7 のベクトル x を置換してサンプリングし、そのベクトルを 10 回サンプリングしたいと思います。次のようなことを試しましたが、探している結果の 7x10 出力を取得できません。これにより 1x7 ベクトルが生成されますが、他の 9 つのベクトルを取得する方法がわかりません

x <- runif(7, 0, 1)
for(i in 1:10){
    samp <- sample(x, size = length(x), replace = T)
}
4

3 に答える 3

30

これは、これを行うための非常に便利な方法です。

replicate(10,sample(x,length(x),replace = TRUE))
于 2012-04-21T23:46:24.787 に答える
4

置換を使用してサンプリングしたいように見えるので、一度に 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...
于 2012-04-21T23:53:42.100 に答える
2

適切な答えが得られたようですが、最初の試みと同様のアプローチを次に示します。違いは、適切なディメンションで定義sampしてから、そのオブジェクトに繰り返しインデックスを付けて、一度に 1 行ずつ入力することです。

samp <- matrix(NA, ncol = 7, nrow = 10)
for(i in 1:10){
  samp[i,] <- sample(x, size = length(x), replace = T)
}
于 2012-04-22T00:01:04.313 に答える