【发布时间】:2018-01-18 11:33:53
【问题描述】:
我有一个向量列表,我想获取每个向量的元素之间所有可能组合的列表,即一次包含两个和两个以上的 n 个元素的组合(来自一个向量)。
例如,我有以下列表:
> 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
....
【问题讨论】:
-
你在找
combn(DF, 2, FUN = list) -
感谢 akrun,但组合是在每个向量的元素之间。我要修改问题。
-
@akrun 也许是
lapply(DF, combn, m = 2, simplify = F)? -
@jazzurro 可能是,让 OP 更新为预期的输出
-
感谢 jazzurro,但在这种情况下 ncol(DF)=3,所以它是 m=2 和 m=3。如果 ncol 为 5,则为 m=2,3,4,5
标签: r