如何根据在 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
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