随机配对R中矢量的元素以计算唯一排列

时间:2018-03-17 15:16:48

标签: r combinations

背景:

this combinatorics question,问题是如何确定样本空间:8个不同的足球队可以配对下一轮比赛的方式。针对该问题的这一部分提出了两个不同的答案:28(见评论OP)和105(参见OP中的编辑和答案)。

我想手动执行此操作,以便在任何答案不正确的情况下尽量减少错误。

我尝试过:

teams = 1:8
names(teams) = c("RM", "BCN", "SEV", "JUV", "ROM", "MC", "LIV", "BYN")
split(sample(teams), rep(1:(length(teams)/2), each=2))

不幸的是,输出是一个列表,我希望一个向量能够运行如下:

unique(...,MARGIN=2)

有没有办法以优雅的方式做到这一点?

在现在删除的答案(谢谢)之后,我会选择

a <- replicate(1e5, unlist(split(sample(teams), rep(1:(length(teams)/2), each=2))))

模拟100,000个随机样本,然后运行

unique(a, MARGIN = 2)

但是我如何解释4对对手的顺序并不重要的事实,例如,LIV-BYNBYN-LIV是相同的配对(字段)尽管有优势)?

1 个答案:

答案 0 :(得分:0)

> u = ncol(unique(replicate(1e6, unlist(split(sample(teams), rep(1:(length(teams)/2), each=2)))), MARGIN = 2))
> u / (factorial(4) * 2^4)
[1] 105

unlist的想法来自@Song Zhengyi,如果他的回答未删除,我会接受。完整的答案在上面的行中。

u需要除以4!因为

BCN-RM, BYN-SEV, JUV-ROM, LIV-MC

完全相同
LIV-MC, BCN-RM, BYN-SEV, JUV-ROM

BCN-RM, LIV-MC, BYN-SEV, JUV-ROM

术语2^4是为了避免过度计数,因为对于每个可能的唯一抽签,每个配对都可以翻转而不会丢失(丢弃字段优势):BCN-RM与{RM-BCN相同1}},每次抽奖都有4对。

如果现场优势是考虑因素(现实生活)......

> u/factorial(4)
[1] 1680

我们最终获得了1,680次抽签。