在多个列表中生成值的排列
Generating Permutations of Values Within Multiple Lists
我正在尝试通过从 3 个不同的列表中获取 1 个值来生成排列
l <- list(A=c(1:13), B=c(1:5), C=c(1:3))
期望的结果 => 所有排列的矩阵,其中第一个值可以是 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...
我们可以使用expand.grid
。可直接应用于list
expand.grid(l)
您可以使用 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
>
我正在尝试通过从 3 个不同的列表中获取 1 个值来生成排列
l <- list(A=c(1:13), B=c(1:5), C=c(1:3))
期望的结果 => 所有排列的矩阵,其中第一个值可以是 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...
我们可以使用expand.grid
。可直接应用于list
expand.grid(l)
您可以使用 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
>