如何生成组合矩阵

Pro*_*ern 19 r cross-join

我有5个项目,每个项目可以取值1或-1.我想生成一个由可能组合的行组成的矩阵.项目的顺序无关紧要,组合的顺序无关紧要.我知道我可以机械地做到这一点,但我认为有人必须知道生成这个矩阵的捷径.如果这与其他问题类似,我很抱歉,但我发现的解决方案都不能用我的编程技巧应用于这个特定问题.

Gre*_*reg 30

expand.grid(c(-1,1), c(-1,1), c(-1,1), c(-1,1), c(-1,1))
Run Code Online (Sandbox Code Playgroud)


car*_*cal 21

概括格雷格的答案:

N   <- 5
vec <- c(-1, 1)
lst <- lapply(numeric(N), function(x) vec)
as.matrix(expand.grid(lst))
Run Code Online (Sandbox Code Playgroud)


Rei*_*ica 5

data.table与以下相比,包装的替代品略快一些expand.grid:

library(data.table)  
CJ(c(-1,1), c(-1,1), c(-1,1), c(-1,1), c(-1,1))
Run Code Online (Sandbox Code Playgroud)

  • 我认为更通用的解决方案是`do.call(CJ, rep(list(c(-1, 1)), 5))` (2认同)