【发布时间】:2011-04-28 22:58:12
【问题描述】:
我有 5 个项目,每个项目的值可以是 1 或 -1。我想生成一个由可能组合的行组成的矩阵。项目的顺序无关紧要,组合的顺序无关紧要。我知道我可以机械地做到这一点,但我认为有人必须知道生成这个矩阵的捷径。如果这与其他问题相似,我深表歉意,但我发现的任何解决方案都不能以我的编程技能应用于这个特定问题。
【问题讨论】:
标签: r cross-join
我有 5 个项目,每个项目的值可以是 1 或 -1。我想生成一个由可能组合的行组成的矩阵。项目的顺序无关紧要,组合的顺序无关紧要。我知道我可以机械地做到这一点,但我认为有人必须知道生成这个矩阵的捷径。如果这与其他问题相似,我深表歉意,但我发现的任何解决方案都不能以我的编程技能应用于这个特定问题。
【问题讨论】:
标签: r cross-join
expand.grid(c(-1,1), c(-1,1), c(-1,1), c(-1,1), c(-1,1))
【讨论】:
概括格雷格的答案:
N <- 5
vec <- c(-1, 1)
lst <- lapply(numeric(N), function(x) vec)
as.matrix(expand.grid(lst))
【讨论】:
data.table 包的替代方案比expand.grid 稍快:
library(data.table)
CJ(c(-1,1), c(-1,1), c(-1,1), c(-1,1), c(-1,1))
【讨论】:
do.call(CJ, rep(list(c(-1, 1)), 5))