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)
приведенные выше ответы являются технически правильными:
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, похоже, в этом примере быстрее.
Этот метод не создает ошибку, когда ваш вектор является длиной один, и это просто.
a[sample(1:length(a),1)]