Як рандомізувати вектор


81

Я хотів би випадково реорганізувати порядок чисел у векторі, за допомогою простої однорядкової команди?

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

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

9
Відповіді тут справедливо вказують на вашу сторону sample. Можливо, ви захочете перевірити тут застереження щодо деяких небезпек, які супроводжуються просто використанням зразка як є.
Дейсон

@Dason: tl; dr до тих пір, поки довжина вектора гарантована> 1, він працює.
smci

1
@smci The tl; Dr полягає в тому, що це небезпечно, оскільки з ним стає комфортно, а потім, коли воно нарешті має довжину 1, воно кусає вас.
Дейсон,

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

Відповіді:


124

Так.

sample(V)

Від ?sample:

Для "sample" за замовчуванням для "size" визначено кількість елементів, виведених з першого аргументу, так що "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]? такі, що кожен елемент міг випадковим чином змінитись на інший, але з підтримкою кількості кожного елемента постійною?
Ротал

2
@Rotail: це вже робить те, що ти хочеш; sizeаргумент по sampleзамовчуванням в size <- length(x). (Введіть, sampleщоб побачити код, який це робить.)
smci

Так! Дякую!
Ротал

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.