我敢肯定,对你们许多人来说,这很简单,这将挽救我的生活: 我需要生成一系列数字的所有对的置换集。例如,对于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
谢谢
答案 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