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`
你可以这样做:
while(any(x == y)) x <- sample(x)
编辑:现在我意识到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]
while (any(ind <- x==y))
   x[ind] <- sample(N, sum(ind), TRUE)
N你在哪里采样(或最大整数)
这里的优点是,如果您不需要重新采样所有x,那么这将更快地收敛.