如何生成向量的所有可能组合而不在R中重复?

如何生成向量的所有可能组合而不在R中重复?,r,combinations,R,Combinations,可能是一个简单的问题,如何生成向量的组合。我有下一个向量 > x<-1:5 > x [1] 1 2 3 4 5 我认为函数expand.grid()可能有用,但我不知道如何准确地使用它。这里有一个combn的解决方案(感谢@Joseph Wood使我的答案更简单): 结果: [1] 1 2 3 4 5 12 13 14 15 23 24 25 34 35 [15] 45

可能是一个简单的问题,如何生成向量的组合。我有下一个向量

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

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

这里有一个
combn
的解决方案(感谢@Joseph Wood使我的答案更简单):

结果:

 [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: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
您还可以将其设置为一个函数:

all_combn = function(vec){
  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(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

哇!这是一个完美的答案,我真的很感激!您可以将函数直接传递到
combn
。。。不需要
数据框
as.numeric(unlist(sapply(vec,function(y)combn(vec,y,paste,collapse=“”)))
仍然非常好@约瑟夫伍德哦!我没有意识到
combn
可以在每个组合上应用一个函数。谢谢,我已将其更新到我的答案中:)