我正试图通过从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...
答案 0 :(得分:0)
我们可以使用expand.grid
。它可以直接应用于list
expand.grid(l)
答案 1 :(得分:0)
您可以使用do.call
和expand.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
>