Ваше требование отсутствия определенных индексов в векторе и невозможности смещения означает, что вам не нужна чисто случайная перестановка, где это может произойти.Лучшее, что я могу придумать, это просто зациклить, используя 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"
Демо
Обратите внимание, что я выполнил требование о смещении позиций со смещением значений.Это, конечно, не совсем верно, потому что два значения могут быть одинаковыми.Но если предположить, что все ваши записи уникальны, тогда проверка на нулевое перекрытие значений приравнивается к нулевому перекрытию индексов.