Создать новый вектор без элемента в той же позиции, что и исходный вектор? - PullRequest
0 голосов
/ 02 октября 2018

Предположим, у меня есть вектор V1 (с двумя или более элементами):

V1 <- 1:10

Я могу изменить порядок исходного вектора с помощью функции sample.Эта функция, однако, не может гарантировать, что ни один элемент в новом векторе не находится в той же позиции, что и исходный вектор.Например:

set.seed(4)
V2 <- sample(V1)

Это приведет к тому, что вектор с двумя элементами будет в том же положении, что и исходный:

V1[V1 == V2]

3 5

Мой вопрос: возможно ли создатьслучайный вектор, чтобы убедиться, что ни один элемент не находится в одинаковом положении между двумя векторами?

1 Ответ

0 голосов
/ 02 октября 2018

Ваше требование отсутствия определенных индексов в векторе и невозможности смещения означает, что вам не нужна чисто случайная перестановка, где это может произойти.Лучшее, что я могу придумать, это просто зациклить, используя sample, пока мы не найдем вектор, в котором каждый элемент сдвигается:

v1 <- 1:10
v1_perm <- v1
cnt <- 0

while (sum(v1 == v1_perm) > 0) {
    v1_perm <- sample(v1)
    cnt <- cnt + 1
}

v1
v1_perm
paste0("It took ", cnt, " tries to find a suitable vector")

[1]  1  2  3  4  5  6  7  8  9 10
[1]  3 10  4  7  8  1  6  2  5  9
[1] "It took 3 tries to find a suitable vector"

Демо

Обратите внимание, что я выполнил требование о смещении позиций со смещением значений.Это, конечно, не совсем верно, потому что два значения могут быть одинаковыми.Но если предположить, что все ваши записи уникальны, тогда проверка на нулевое перекрытие значений приравнивается к нулевому перекрытию индексов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...