我正在尝试从多项式中提取样本,以便按重量拉出向量的元素。
例如,给定向量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循环,但我希望现有的方法可以做到这一点。
答案 0 :(得分:2)
您可以将sample
与prob参数
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