2017-05-23 9 views
2

特定の確率pでベクトルの各要素をサンプリングしたいと考えています。これは、私は現在、それを行う方法ですが、私はそれは難しい、これが最もエレガントな方法であると信じて見つける:R:特定の確率*を持つベクトルの各要素をエレガントにサンプリングする*

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?スピードについてはあまり気にしないでください。それは常に良いことです。

+3

もっとエレガントなのかどうかわかりませんが、私は 'vec [runif(length(vec)) Miff

+1

@ミフ答えとして追加する必要があります、奇跡は何も起こらない場合、私はそれが私の判断としてそれを受け入れるよ*よりエレガントです。 –

+1

これは基本的には2番目の解決策と同じですが、 'ifelse'を使う必要はありません。 'vec [rbinom(length(vec)、1、p)== 1]' –

答えて

0

(私はここでそれを書き留めますので@Miffはこの答えにコメントするので:)

vec[runif(length(vec)) < p] 

は私が現時点で知っている最もエレガントな方法で一日以上が過ぎました。

関連する問題