很抱歉,如果我无法按照需要进行重现,但这是我的第一次尝试,因此在这里进行。我想弄清楚NBA彩票类型系统的数学赔率。系统的工作方式是为团队分配一定数量的乒乓球,并一次抽出一个乒乓球。如果选择了数字,则删除其余具有相同数字的乒乓球,然后画另一个球。我考虑过使用pbinom()来解决这个问题,但是后来意识到,根据已经绘制的球,赔率会发生变化。因此,我决定尝试仅模拟问题。为此,我想出了以下代码
sim_draft <- function(n){
set.seed(3)
# Initalize lottery
draft_order <- c()
n=1
slot_1<-rep(1,6)
slot_2 <- rep(2,5)
slot_3 <- rep(3,4)
slot_4 <- rep(4,3)
slot_5 <- rep(5,2)
slot_6 <- rep(6,1)
lottery_bag <- c(slot_1,slot_2,slot_3,slot_4,slot_5,slot_6)
while (n!=7){
print("lottery bag")
print(lottery_bag)
pick1 <- sample(lottery_bag,1)
print(pick1)
draft_order <- append(draft_order,pick1)
lottery_bag <- lottery_bag[!lottery_bag %in% pick1]
n <- n+1
}
return(draft_order)
}
sim_draft(1)
我用这个种子保存了它,因为出于某种原因,当我运行代码时,while循环中的最后一次运行只是重复了草稿订单列表上的第5个条目。在这种情况下,它将打印“ 1 5 3 2 4 4”。我添加了用于调试的打印语句,但无法弄清楚出了什么问题。彩票袋正确打印后只剩下“ 6”,但示例函数返回“ 4”
编辑:
if (length(lottery_bag)==1)
draft_order <- append(draft_order,6)
else
draft_order <- append(draft_order,pick1)
进一步,正如MrFLick所指出的那样,这就是样本的行为方式,我什至不需要该函数,因为给定一个概率列表,样本就可以为我完成所有工作
sample(1:6,6,replace = FALSE, prob=c(6/20,5/20,4/20,3/20,2/20,1/20))