也许是一个简单的问题,如何生成矢量的组合。我有下一个载体。
> x<-1:5
> x
[1] 1 2 3 4 5
所以我想要的是所有这些的组合,但序列中的组合不能包含相同的数字ab==ba
,abc==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()
可能很有用,但我不知道如何正确使用它。
答案 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