在多个列表中生成值的排列

时间:2016-08-10 17:17:04

标签: r permutation

我正试图通过从3个不同的列表中取1个值来生成排列

l <- list(A=c(1:13), B=c(1:5), C=c(1:3))

期望的结果=&gt;所有排列的矩阵,其中第一个值可以是1-13,第二个值可以是1-5,第三个值可以是1-3

我尝试使用combinat包中的permn,但似乎只是重新安排了3个列表。

> permn(l)
[[1]]
[[1]]$A
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13

[[1]]$B
[1] 1 2 3 4 5

[[1]]$C
[1] 1 2 3


[[2]]
[[2]]$A
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13

[[2]]$C
[1] 1 2 3

[[2]]$B
[1] 1 2 3 4 5
....

预期输出

     [,1] [,2] [,3]
[1,]    1    1    3
[2,]    1    2    1
[3,]    1    1    2
[4,]    1    1    3
and so on...

2 个答案:

答案 0 :(得分:0)

我们可以使用expand.grid。它可以直接应用于list

expand.grid(l)

答案 1 :(得分:0)

您可以使用do.callexpand.grid创建数据框,如果您确实需要矩阵,则在结果上使用as.matrix

> l <- list(A=c(1:13), B=c(1:5), C=c(1:3))
> out <- do.call(expand.grid, l)
> head(out)
  A B C
1 1 1 1
2 2 1 1
3 3 1 1
4 4 1 1
5 5 1 1
6 6 1 1
> tail(out)
     A B C
190  8 5 3
191  9 5 3
192 10 5 3
193 11 5 3
194 12 5 3
195 13 5 3
> tail(as.matrix(out))
        A B C
[190,]  8 5 3
[191,]  9 5 3
[192,] 10 5 3
[193,] 11 5 3
[194,] 12 5 3
[195,] 13 5 3
>