比较矢量值

Rya*_*ell 4 r vector random-sample

`我想知道如何改变这个代码,以便两个向量的相应值不能相等.例如:如果x =(1,2,2,4,8,1,7,9,5,10)和y =(3,2,7,8,4,10,4,8,2, 1),两个向量的第二个值等于2.有没有什么方法可以告诉R在向量x中的第二个点重新采样,直到它在向量y中不是相同的值?

x <- c(1:10)
y <- c(1:10)
sample_x <- sample(x, length(10), replace = TRUE)
z <- sample_x > y`
Run Code Online (Sandbox Code Playgroud)

flo*_*del 7

你可以这样做:

while(any(x == y)) x <- sample(x)
Run Code Online (Sandbox Code Playgroud)

编辑:现在我意识到x并且y可能来自一个类似的sample调用replace = TRUE,这是一个避免while循环的有趣方法.它使用索引和模数来确保两个样本不匹配:

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]
Run Code Online (Sandbox Code Playgroud)


Ric*_*rta 5

while (any(ind <- x==y))
   x[ind] <- sample(N, sum(ind), TRUE)
Run Code Online (Sandbox Code Playgroud)

N你在哪里采样(或最大整数)

这里的优点是,如果您不需要重新采样所有x,那么这将更快地收敛.