对的排列列表

时间:2018-08-16 10:57:37

标签: r permutation combinatorics

我敢肯定,对你们许多人来说,这很简单,这将挽救我的生活: 我需要生成一系列数字的所有对的置换集。例如,对于1:6,它将得到30个子集,即n(n-1):

作为最终结果
(1,2),(3,4),(5,6)
...
(1,6),(2,3),(4,5)

我需要成对,而不是一对,所以(3,4)和(4,3)是唯一的对。

combn(1:6,2)给了我一张表格,其中以配对为列,但是如何从中产生配对列表?

combn(1:6,2)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,]    1    1    1    1    1    2    2    2    2     3     3     3     4     4     5
[2,]    2    3    4    5    6    3    4    5    6     4     5     6     5     6     6

谢谢

2 个答案:

答案 0 :(得分:2)

我们可以在simplify = FALSE中设置参数combn,使其返回列表:

combn(1:6, 2, simplify = FALSE)
#[[1]]
#[1] 1 2
#
#[[2]]
#[1] 1 3
#
#[[3]]
#[1] 1 4
#
#[[4]]
#[1] 1 5
#...

答案 1 :(得分:1)

以相反的顺序和rbind重复您的过程。例如,现在同时包含c(3,4)c(4,3)。我正在使用t进行转置,这使得查看数据更加容易。

rbind( t(combn(1:6,2)), t(combn(6:1,2)) )

      [,1] [,2]
 [1,]    1    2
 [2,]    1    3
 [3,]    1    4
 [4,]    1    5
 [5,]    1    6
 [6,]    2    3
 [7,]    2    4
 [8,]    2    5
 [9,]    2    6
[10,]    3    4
[11,]    3    5
[12,]    3    6
[13,]    4    5
[14,]    4    6
[15,]    5    6
[16,]    6    5
[17,]    6    4
[18,]    6    3
[19,]    6    2
[20,]    6    1
[21,]    5    4
[22,]    5    3
[23,]    5    2
[24,]    5    1
[25,]    4    3
[26,]    4    2
[27,]    4    1
[28,]    3    2
[29,]    3    1
[30,]    2    1