4

両方のベクトルの対応する値が等しくならないように、このコードをどのように変更すればよいか考えています。例: x = (1, 2, 2, 4, 8, 1, 7, 9, 5, 10) かつ y = (3, 2, 7, 8, 4, 10, 4, 8, 2, 1)、両方のベクトルの 2 番目の値は 2 に等しい。ベクトル y で同じ値でなくなるまで、ベクトル x のこの 2 番目のスポットで R に再サンプリングするように指示できる方法はありますか?

x <- c(1:10)
y <- c(1:10)
sample_x <- sample(x, length(10), replace = TRUE)
z <- sample_x > y`
4

3 に答える 3

7

あなたがすることができます:

while(any(x == y)) x <- sample(x)

編集:今、私は気付いxており、おそらく との同様の呼び出しyから来ています。これは、ループを回避する興味深いアプローチです。インデックスとモジュロを使用して、2 つのサンプルが一致しないようにします。samplereplace = TRUEwhile

N <- 1:10  # vector to choose from (assumes distinct values)
L <- 20    # sample size - this might be length(N) as in your example

n <- length(N)

i <- sample(n,   L, replace = TRUE)
j <- sample(n-1, L, replace = TRUE)

x <- N[i]
y <- N[1 + (i + j - 1) %% n]
于 2013-08-05T01:11:20.567 に答える
5
while (any(ind <- x==y))
   x[ind] <- sample(N, sum(ind), TRUE)

Nサンプリング元(または最大整数)はどこですか

ここでの利点は、 のすべてを再サンプリングする必要がない場合、xより迅速に収束することです。

于 2013-08-05T01:16:49.940 に答える
0

ライブラリ Combinat の関数 permn を使用して、長さ 10 のベクトルのすべての順列を生成できます。

ind <- permn(10)
xy_any_equal <- sapply(ind, function(i) any(x[i] == y))
if(sum(xy_any_equal) < length(xy_any_equal)) x_perm <- x[head(ind[!xy_any_equal],1)[[1]]]
exists(x_perm)
于 2013-08-05T09:19:30.093 に答える