如何生成向量的所有可能组合而不在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
可以在每个组合上应用一个函数。谢谢,我已将其更新到我的答案中:)