Cómo aleatorizar un vector

81

Me gustaría reorganizar aleatoriamente el orden de los números en un vector, en un simple comando de una línea.

Mi vector particular V tiene 150 entradas para cada valor de 1 a 10:

V <- rep(1:10, each=150)
usuario1723765
fuente
9
Las respuestas aquí apuntan correctamente hacia usted sample. Es posible que desee consultar las advertencias aquí para ver algunos peligros que acompañan al uso de la muestra tal como está.
Dason
@Dason: el tl; dr es siempre que se garantice que la longitud del vector sea> 1, funciona.
smci
1
@smci El tl; Dr es que es peligroso porque uno se siente cómodo con él y luego cuando finalmente es de longitud 1 te muerde.
Dason
@Dason Había leído eso, pero nadie ha modificado aún base::samplepara forzar su uso seq_along. Además, no veo dónde sample/sample.intllamar de base::seq()todos modos.
smci

Respuestas:

124

Si.

sample(V)

De ?sample:

Para 'muestra', el valor predeterminado para 'tamaño' es el número de elementos inferidos del primer argumento, de modo que 'muestra (x)' genera una permutación aleatoria de los elementos de 'x' (o '1: x').

Ben Bolker
fuente
¿Cómo puedo mezclar [1,1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5] de modo que obtengo algo como esto: [5, 5, 3, 3, 3, 3, 1, 1, 2, 4, 4, 4]? tal que cada elemento podría cambiar aleatoriamente a otro pero manteniendo constante el número de cada elemento?
Rotail
2
@Rotail: esto ya hace lo que quieres; el sizeargumento de los samplevalores predeterminados size <- length(x). (Escriba samplepara ver el código que hace esto.)
smci
¡Sip! ¡Gracias!
Rotail
24

sampleFunción de uso

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

set.seed(001) # just to make it reproducible
sample(V)
Jilber Urbina
fuente
1
replace=FALSEes el valor predeterminado.
Ben Bolker
esto hace 150 valores del original 1500
user1723765