如何根据在 R 中为真的一长串概率进行采样?

How to sample according to a long array of probabilities of being True in R?

N <- 1000
arr_p_True <- runif(N)
arr_simulated <- sapply(arr_p_True, function(p) {
  sample(c(T, F), 1, prob = c(p, 1 - p))
})

arr_p_True 是我想要得到的,但是对于非常大的 N,这是非常低效的。 sample() 似乎不是在这种情况下要考虑的正确函数,因为它是根据选择 x 中每个元素的概率向量化的,而不是根据选择第一个元素的概率向量化的在 x 中,如我的示例所要求的那样。

我找不到合适的关键字...我一直被引导回 sample()。感谢任何帮助。

我觉得你可以

arr_p_True <- runif(N)
as.logical(rbinom(N, size = 1, prob = arr_p_True))

但是如果 arr_p_True 在你的真实代码中是 runif(N),那么这等同于

as.logical(rbinom(N, size = 1, prob = 0.5))

您可以从单位区间生成一个随机数向量。概率 p 该值将小于 p:

N <- 1000
arr_p_True <- runif(N)
arr_simulated <- runif(N) < arr_p_True