генерировать вектор от 0 до 1, с определенной длиной и определенным числом 1 - PullRequest
0 голосов
/ 13 декабря 2018

Мне нужно создать вектор длины 4, такой, чтобы 2 из элементов были 1, остальные 2 равны 0, и какое число появляется в определенном месте, является случайным.

Например, первыйсимуляция [1, 1, 0, 0].Второе моделирование может быть [1, 0, 1, 0] или что-то еще.

Я попробовал код следующим образом:

 sample(x = c(0,1), size = 4, replace = TRUE, prob = 0.5)

, но он просто возвратил список со случайными числами1 и 0.

Можно ли создать такой список без использования циклов for или while?

1 Ответ

0 голосов
/ 13 декабря 2018

В качестве аргумента prob можно указать два значения, но это не гарантирует, что распределение будет равным

sample(x = c(0,1), size = 4, replace = TRUE, prob = c(0.5, 0.5))
#[1] 1 0 0 1
sample(x = c(0,1), size = 4, replace = TRUE, prob = c(0.5, 0.5))
#[1] 1 1 0 1
sample(x = c(0,1), size = 4, replace = TRUE, prob = c(0.5, 0.5))
#[1] 0 0 0 1

Вместо этого вы можете создать вектор с помощью rep и затем использовать sample для случайности

sample(rep(c(1, 0), 2))
#[1] 0 1 0 1

sample(rep(c(1, 0), 2))
#[1] 0 0 1 1

sample(rep(c(1, 0), 2))
#[1] 1 1 0 0

sample(rep(c(1, 0), 2))
#[1] 0 1 1 0

Это также будет работать, если у вас есть другая длина вектора, поскольку мы можем использовать times аргумент

n <- 11

sample(rep(c(0, 1), c(n - 3, 3)))
#[1] 0 0 1 0 1 1 0 0 0 0 0
sample(rep(c(0, 1), c(n - 3, 3)))
#[1] 0 1 0 0 0 0 1 0 0 0 1
sample(rep(c(0, 1), c(n - 3, 3)))
#[1] 0 1 0 0 0 0 1 0 0 0 1
...