我有一个 vector 列表,我想获得每个 vector 元素之间所有可能组合的列表,即一次取两个或两个以上的n个元素的组合(来自一个 vector )。
例如,我有以下列表:
> DF
$`1`
A B C
1 11 2 432
$`2`
A B C
2 11 3 432
$`3`
A B C
3 13 4 241
这是我的代码:
> d=list()
> for (j in 1:length(DF)){
+ for (i in 2:length(DF)){
+ d[[j]]=combn(DF[[j]],i,simplify=F)
+ }
+ }
> d
[[1]]
[[1]][[1]]
A B C
1 11 2 432
[[2]]
[[2]][[1]]
A B C
2 11 3 432
[[3]]
[[3]][[1]]
A B C
3 13 4 241
这是错误的,因为我只能同时获得三个元素的三个元素的组合。我将不得不添加三个元素的组合,一次要两个。我只是得到最后一个循环值。这是循环内部尺寸的问题。
如果我只为i = 2运行循环,则得到:
> d
[[1]]
[[1]][[1]]
A B
1 11 2
[[1]][[2]]
A C
1 11 432
[[1]][[3]]
B C
1 2 432
[[2]]
[[2]][[1]]
A B
2 11 3
[[2]][[2]]
A C
2 11 432
[[2]][[3]]
B C
2 3 432
....
最佳答案
你可以尝试
lapply(2:3, function(k) { lapply(1:length(DF),function(x){ combn(DF[[x]],k,
simplify = FALSE)})})
关于r - 向量列表的所有可能组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48320359/