Вибрати випадковий елемент у списку R?


75
a<-c(1,2,0,7,5)

Деякі мови мають функцію вибору - вибрати одне випадкове число з a- як у R?


11
На замітку: Ви здаєтесь, що ви новачок у R, і, мабуть, вам слід просто прочитати деякі вступні матеріали. stackoverflow.com/questions/420296 / ...
Dason

З іншого боку: Прикладом даних, які ви надаєте, є вектор, а не список. Якщо ви хочете знати, як відібрати елемент зі списку, ви можете подивитися тут: statisticsglobe.com/select-random-element-from-list-in-r
Йоахім Шорк

Відповіді:


95
# Sample from the vector 'a' 1 element.
sample(a, 1)

10
Будьте обережні з зразком! Якщо aмає довжину 1, є числовою (у значенні is.numeric) і a> = 1, вибірка через вибірку відбувається з 1:a. Зверніть увагу, що ця зручна функція може призвести до небажаної поведінки, коли aвона різної довжини.
помбер

Чи існує якась функція в R, яка відбирає значення та залишає невибрані значення як NA?
hhh

30

наведені вище відповіді є технічно правильними:

sample(a,1)

однак, якщо ви хочете повторити цей процес багато разів, скажімо, ви хотіли б імітувати кидання кісток, тоді вам потрібно додати:

a<-c(1,2,3,4,5,6)
sample(a, 12, replace=TRUE)

Сподіваюся, це допоможе.


17

Будьте обережні, використовуючи зразок!

sample(a, 1)чудово працює для вектора у вашому прикладі, але коли вектор має довжину 1, це може призвести до небажаної поведінки, він буде використовувати вектор 1:aдля вибірки.

Отже, якщо ви намагаєтеся вибрати випадковий предмет із вектора різної довжини, перевірте випадок довжини 1!

sampleWithoutSurprises <- function(x) {
  if (length(x) <= 1) {
    return(x)
  } else {
    return(sample(x,1))
  }
}

Вони повинні виправити цю помилку.
skan

5

Прочитайте цю статтю про генерування випадкових чисел у R.

http://blog.revolutionanalytics.com/2009/02/how-to-choose-a-random-number-in-r.html

Ви можете використовувати sampleв цьому випадку

sample(a, 1)

Другий атрибут показує, що ви хочете отримати лише одне випадкове число. runifКорисно генерувати число між деякими діапазонами .


5

Цей метод не видає помилки, коли ваш вектор має довжину одиницю, і це просто.

a[sample(1:length(a),1)]

2

Альтернативою є вибір елемента з вектора за допомогою runif. тобто

a <- c(1,2,0,7,5)
a[runif(1,1,6)]

Скажімо, вам потрібна функція, яка вибирає одну при кожному запуску (корисно, наприклад, в моделюванні). Так

a <- c(1,2,0,7,5)
sample_fun_a <- function() sample(a, 1)
runif_fun_a <- function() a[runif(1,1,6)]
microbenchmark::microbenchmark(sample_fun_a(), 
                           runif_fun_a(),
                           times = 100000L)

Одиниця виміру: наносекунди

sample_fun_a () - 4665

runif_fun_a () - 1400

runif, здається, швидший у цьому прикладі.

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