我希望以特定概率p
对矢量的每个元素进行采样。这就是我目前的做法,我发现很难相信这是最优雅的方式:
vec <- letters[1:5]
p <- 0.8
sampInd <- sample(c(TRUE, FALSE), length(vec), prob = c(p, 1-p), replace = TRUE)
vec[sampInd]
[1] "c" "d" "e"
使用伯努利分布的另一种方式:
sampInd <- ifelse(rbinom(length(vec), 1, p) == 1, TRUE, FALSE)
vec[sampInd]
[1] "a" "b" "c" "e"
我是否缺少一些base
功能来更优雅地执行此操作,或者使我对sample
或rbinom
的使用更加复杂?不要太在意速度,尽管它总是一件好事。
答案 0 :(得分:0)
(自从@Miff评论这个答案以来已经过了一天,所以我会把它写在这里:)
vec[runif(length(vec)) < p]
是我目前所知道的最优雅的方式。