有一个6人的节日聚会,6人中的每一个人都有一个关于他们的gifts_brought
的估计,每个人都有一个关于他们收到另一个人礼物的机会的估计(gifts_received_pct
).一个人可以从另一个人那里收到的礼物数量没有限制。他们只能给予/接收来自自己团队的礼物,他们不能把自己带来的礼物送给自己。
我的真实的问题有1000个不同的迭代/估计参数gifts_brought
和gifts_received_pct
,我想估计所有1000个估计中每个人收到的礼物总数。为了这个练习的目的,我将使所有的估计相同,但我想明确的是,实际上,我所有的嵌套都对参数有不同的估计,这就是为什么我不能只做rmultinom(1000, ...)
。
首先构建虚拟代码。
name <- c('Aaron', 'Susie', 'Sam', 'Emma', 'Jennifer', 'Steve')
giftsBrought <- c(5, 3, 4, 2, 3, 6)
team <- c('Sales', 'Sales', 'Sales', 'IT', 'IT', 'IT')
gifts_received_pct <- c(.2, .3, .1, .2, .2, .1) # rmultinom does not require normilazation
giftsDF <- data.frame(name, team, giftsBrought, gifts_received_pct, stringsAsFactors = FALSE)
giftsEstimationList <- list()
for(i in 1:1000){
giftsEstimationList[[i]] <- giftsDF
}
字符串
接下来,这是我如何为其中一个数组获取gifts_received计算:
giftsReceivedDF <- lapply(1:nrow(giftsDF), function(i){
probs <- giftsDF
probs$gifts_received_pct[probs$team != giftsDF$team[i] | probs$name == giftsDF$name[i]] <- 0 # set other_team_pct and own_pct to 0
rmultinom(1, giftsDF$giftsBrought[i], probs$gifts_received_pct)
})
Reduce(`+`, giftsReceivedDF)
型
我相信这是正确的-当仔细查看giftsReceivedDF
时,似乎没有人收到过自己的礼物,而另一个团队也没有收到任何礼物。
让我困惑的是如何及时地在giftsEstimationList
中的所有1000个嵌套框中运行它。我最初试图用一堆for循环来强制执行所有内容,但我不相信这是最有效的,而且时间在这里相当重要。
1条答案
按热度按时间nfzehxib1#
一个模拟礼物交换的函数。它在所有团队和迭代中被向量化。它只需要循环最大参与者数量(示例数据中为3)。
字符串
演示:
型