a<-c(1,2,0,7,5)
Деякі мови мають функцію вибору - вибрати одне випадкове число з a
- як у R?
a<-c(1,2,0,7,5)
Деякі мови мають функцію вибору - вибрати одне випадкове число з a
- як у R?
Відповіді:
# Sample from the vector 'a' 1 element.
sample(a, 1)
a
має довжину 1, є числовою (у значенні is.numeric) і a
> = 1, вибірка через вибірку відбувається з 1:a
. Зверніть увагу, що ця зручна функція може призвести до небажаної поведінки, коли a
вона різної довжини.
наведені вище відповіді є технічно правильними:
sample(a,1)
однак, якщо ви хочете повторити цей процес багато разів, скажімо, ви хотіли б імітувати кидання кісток, тоді вам потрібно додати:
a<-c(1,2,3,4,5,6)
sample(a, 12, replace=TRUE)
Сподіваюся, це допоможе.
Будьте обережні, використовуючи зразок!
sample(a, 1)
чудово працює для вектора у вашому прикладі, але коли вектор має довжину 1, це може призвести до небажаної поведінки, він буде використовувати вектор 1:a
для вибірки.
Отже, якщо ви намагаєтеся вибрати випадковий предмет із вектора різної довжини, перевірте випадок довжини 1!
sampleWithoutSurprises <- function(x) {
if (length(x) <= 1) {
return(x)
} else {
return(sample(x,1))
}
}
Прочитайте цю статтю про генерування випадкових чисел у R.
http://blog.revolutionanalytics.com/2009/02/how-to-choose-a-random-number-in-r.html
Ви можете використовувати sample
в цьому випадку
sample(a, 1)
Другий атрибут показує, що ви хочете отримати лише одне випадкове число. runif
Корисно генерувати число між деякими діапазонами .
Альтернативою є вибір елемента з вектора за допомогою 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, здається, швидший у цьому прикладі.