如何生成一个矢量的所有可能组合而不重复R?

时间:2017-11-03 20:14:54

标签: r combinations

也许是一个简单的问题,如何生成矢量的组合。我有下一个载体。

> x<-1:5
> x
[1] 1 2 3 4 5

所以我想要的是所有这些的组合,但序列中的组合不能包含相同的数字ab==baabc==bca==cab,即:

permut<-c(1:5,12,13,14,15,23,24,25,34,...,123,124,125,134,135,...,1234,1235,...)
permut
[1] 1 2 3 4 5 12 13 14 15 23 24 25 34 ... 123 124 125 134 135 ... 1234 1235

我认为函数expand.grid()可能很有用,但我不知道如何正确使用它。

1 个答案:

答案 0 :(得分:5)

这是一个combn的解决方案(@Joseph Wood的答案让我的答案更简单):

as.numeric(unlist(sapply(vec, function(y) combn(vec, y, paste, collapse = ""))))

<强>结果:

 [1]     1     2     3     4     5    12    13    14    15    23    24    25    34    35
[15]    45   123   124   125   134   135   145   234   235   245   345  1234  1235  1245
[29]  1345  2345 12345

你也可以把它变成一个功能:

all_combn = function(vec){
  as.numeric(unlist(sapply(vec, function(y) combn(vec, y, paste, collapse = ""))))
}

<强>结果:

> all_combn(1:5)
 [1]     1     2     3     4     5    12    13    14    15    23    24    25    34    35
[15]    45   123   124   125   134   135   145   234   235   245   345  1234  1235  1245
[29]  1345  2345 12345

> all_combn(1:6)
 [1]      1      2      3      4      5      6     12     13     14     15     16     23
[13]     24     25     26     34     35     36     45     46     56    123    124    125
[25]    126    134    135    136    145    146    156    234    235    236    245    246
[37]    256    345    346    356    456   1234   1235   1236   1245   1246   1256   1345
[49]   1346   1356   1456   2345   2346   2356   2456   3456  12345  12346  12356  12456
[61]  13456  23456 123456