使用不同概率的向量从 (0,1) 重复绘制的最佳方法是什么? (右)
What is the optimal way to draw repeatedly from (0,1) with a vector of varying probabilities? (R)
我经常遇到这样的问题,我想重复地从 c(0,1)
中用 'success' 概率 prob
的不同向量替换来抽取样本,例如
prob <- c(1:5/10)
同时使用 for
循环的两个选项是:
A <- numeric()
n <- length(prob)
for(i in 1:n){
A[i] <- rbinom( 1 , 1 , prob = prob[i] )
}
和
for(i in 1:n){
A[i] <- sample( c(0,1) , 1 , prob = c(1-prob[i],prob[i]) )
}
是否有更直接(最佳、优雅)的方法来做到这一点,例如不使用 for
循环?
所有分布函数都完全矢量化,例如:
set.seed(42)
rbinom(2, 1, c(0.01, 0.99))
#[1] 0 1
rnorm(2, mean = c(1, 1e3))
#[1] 0.4353018 1000.3631284
rf(2, c(1, 10), c(10, 1))
#[1] 1.408771 4.677464
等等
我经常遇到这样的问题,我想重复地从 c(0,1)
中用 'success' 概率 prob
的不同向量替换来抽取样本,例如
prob <- c(1:5/10)
同时使用 for
循环的两个选项是:
A <- numeric()
n <- length(prob)
for(i in 1:n){
A[i] <- rbinom( 1 , 1 , prob = prob[i] )
}
和
for(i in 1:n){
A[i] <- sample( c(0,1) , 1 , prob = c(1-prob[i],prob[i]) )
}
是否有更直接(最佳、优雅)的方法来做到这一点,例如不使用 for
循环?
所有分布函数都完全矢量化,例如:
set.seed(42)
rbinom(2, 1, c(0.01, 0.99))
#[1] 0 1
rnorm(2, mean = c(1, 1e3))
#[1] 0.4353018 1000.3631284
rf(2, c(1, 10), c(10, 1))
#[1] 1.408771 4.677464
等等