我目前在R中运行100次多项式仿真,结果2、3、4、5都有一定的概率。我的目标是进行120次抽奖,每次抽奖只会导致上述结果之一。最后,我总结了模拟结果。我已经可以使用以下代码紧凑地实现此目标:
> y<-c(2,3,4,5)
> replicate(100, sum(rmultinom(120,size=1,prob=c(0.1,0.2,0.6,0.1))*y))
但是,我想添加额外的条件,即如果在任何模拟运行中结果5(概率为0.1的最后一行)被绘制10次,则停止模拟(120次绘制),并简单地按上述方法添加结果。 / p>
任何有关如何将上述条件纳入上述代码的帮助将不胜感激。
答案 0 :(得分:2)
也许有更好的方法可以执行OP的要求,但我相信以下方法可以做到。
set.seed(4062) # Make the results reproducible
y <- c(2, 3, 4, 5)
n <- 100
m <- integer(n)
for(i in 1:n){
r <- rmultinom(120, size = 1, prob = c(0.1, 0.2, 0.6, 0.1))*y
if(sum(r == 5) >= 10){
r <- apply(r, 2, function(x) x[x != 0])
j <- which(r == 5)[10]
m[i] <- sum(r[seq_len(j)])
}else{
m[i] <- sum(r)
}
}