1

ベクトルの要素を重みで引き出すために、多項分布からサンプリングしようとしています。

たとえば、ベクトルv <-c(10、30、60)が与えられた場合、次のようになります。[3、3、2、3、1、2、3、2、3、3]

これが私がこれまでに思いつくことができる最高のものです:

v <- c(10, 30, 60)
apply(rmultinom(10,1,v),2,function(x) which(x==1))

これは小さなNとKで問題なく機能しますが、実際には1〜100kのインデックスセットから100kのサンプルを生成する必要があります。これは、この方法ではNxKの一時行列が必要なため、明らかに機能しないためです。forループを使用することもできますが、これを行うための既存のメソッドがあることを期待していました。

4

1 に答える 1

2

sampleprobパラメータで使用できます

sample(length(v), 10, replace = T, prob = v)

いくつかのサンプル出力:

v <- c(10, 30, 60)
out <- sample(length(v), 100, replace = T, prob = v)
out
#  [1] 3 3 3 3 3 3 3 2 2 2 2 3 3 1 3 3 3 3 2 2 3 2 1 3 3 2 3 3 3 2 2 3 2 3 1 2 2 3 3
# [40] 3 2 2 2 2 3 2 1 3 3 3 3 3 3 3 3 1 2 2 3 3 3 2 3 3 3 1 3 3 3 2 1 3 3 3 2 2 3 3
# [79] 3 3 1 3 2 3 3 3 3 2 3 3 2 2 3 2 3 2 2 2 2 3
table(out)
#out
# 1  2  3 
# 8 33 59 
于 2012-09-12T17:41:34.033 に答える