Как рандомизировать вектор


81

Я хотел бы случайным образом изменить порядок чисел в векторе с помощью простой однострочной команды?

Мой конкретный вектор V имеет 150 записей для каждого значения от 1 до 10:

V <- rep(1:10, each=150)

9
Ответы здесь правильно указывают на вашу сторону sample. Возможно, вы захотите ознакомиться с предупреждениями здесь о некоторых опасностях, связанных с простым использованием образца как есть.
Дейсон 07

@Dason: tl; dr - до тех пор, пока длина вектора гарантированно будет> 1, это работает.
smci

1
@smci. tl; Dr заключается в том, что это опасно, потому что человек привыкает к нему, а затем, когда он наконец достигает длины 1, он вас кусает.
Дейсон

@Dason Я читал это, но никто еще не модифицировал его base::sampleдля принудительного использования seq_along. Также я все равно не вижу, куда sample/sample.intзвонить base::seq()?
smci

Ответы:


124

Да.

sample(V)

Откуда ?sample:

Для "выборки" по умолчанию "размер" - это количество элементов, выводимое из первого аргумента, так что "выборка (x)" генерирует случайную перестановку элементов "x" (или "1: x").


Как я могу перемешать [1,1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5] так, чтобы получить что-то вроде этого: [5, 5, 3, 3, 3, 3, 1, 1, 2, 4, 4, 4]? таким образом, чтобы каждый элемент мог случайным образом изменяться на другой, но с сохранением числа каждого элемента постоянным?
Rotail,

2
@Rotail: это уже делает то, что вы хотите; sizeаргумент по sampleумолчанию в size <- length(x). (Введите, sampleчтобы увидеть код, который делает это.)
smci

Ага! Спасибо!
Rotail

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.