library(plyr)
library(magrittr)
res <-
expand.grid(
0:2, 0:2, 0:2,
0:1, 0:1, 0:1,
0, 0, 0
) %>%
as.matrix() %>%
alply(1, matrix, nrow = 3, byrow = TRUE)
# remove redundant plyr attributes
res <- res[1:length(res)]
res
#> $`1`
#> [,1] [,2] [,3]
#> [1,] 0 0 0
#> [2,] 0 0 0
#> [3,] 0 0 0
#>
#> $`2`
#> [,1] [,2] [,3]
#> [1,] 1 0 0
#> [2,] 0 0 0
#> [3,] 0 0 0
#>
#> $`3`
#> [,1] [,2] [,3]
#> [1,] 2 0 0
#> [2,] 0 0 0
#> [3,] 0 0 0
...
expand.grid 创建一个包含 9 个数字的所有组合的 data.frame,其中前三个数字可以是 0 到 2,后三个数字是 0 或 1,最后三个总是 0。所以基本上这是我们需要编写的矩阵在行中。确实有216个。现在我们只需要将行转换为 3x3 矩阵。
我能找到的最佳方法是将数据帧转换为矩阵,然后使用plyr::alply。