Jak losować wektor


81

Chciałbym losowo zmienić kolejność liczb w wektorze za pomocą prostego jednowierszowego polecenia?

Mój konkretny wektor V ma 150 wpisów dla każdej wartości od 1 do 10:

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

9
Odpowiedzi tutaj słusznie wskazują ci kierunek sample. Możesz sprawdzić ostrzeżenia tutaj, aby dowiedzieć się, jakie niebezpieczeństwa wiążą się z używaniem próbki w takiej postaci, w jakiej jest.
Dason

@Dason: tl; dr jest tak długi, jak długość wektora jest> 1, działa.
smci

1
@smci The tl; Dr jest takie, że jest to niebezpieczne, ponieważ czujesz się z nim komfortowo, a gdy w końcu ma długość 1, gryzie cię.
Dason

@Dason Czytałem to, ale nikt nie jest jeszcze zmodyfikowany, base::sampleaby wymusić użycie seq_along. Poza tym i tak nie widzę, gdzie sample/sample.intzadzwonić base::seq()?
smci

Odpowiedzi:


124

Tak.

sample(V)

Od ?sample:

Dla „próbki” wartością domyślną „size” jest liczba elementów wywnioskowana z pierwszego argumentu, tak że „próbka (x)” generuje losową permutację elementów „x” (lub „1: x”).


Jak mogę tasować [1, 1, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5] tak, że otrzymam coś takiego: [5, 5, 3, 3, 3, 3, 1, 1, 2, 4, 4, 4]? tak, że każdy element może losowo zmienić się na inny, ale z zachowaniem stałej liczby każdego elementu?
Rotail

2
@Rotail: to już robi to, co chcesz; sizeargument sampledomyślnych do size <- length(x). (Wpisz, sampleaby zobaczyć kod, który to robi.)
smci

tak! Dziękuję Ci!
Rotail

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.