将多个组合矩阵合并在一起

时间:2013-04-30 01:52:18

标签: r

我有两个基于组合构建的矩阵

mat1 <- combn(10, 2)
mat2 <- combn(20, 3)

mat1为2x45,mat2为3x1140。

我想要产生的是假设您按顺序执行两个操作的可能组合。所以前10个选择2个,紧接着20个选择3个,所有的组合是什么。我想生产一个有5行和51300列的矩阵。第一列值为(1,2,1,2,3)

实施此方法最合适的方式是什么?

2 个答案:

答案 0 :(得分:2)

有趣的问题。这是一个使用几个Kronecker产品的解决方案:

one1 <- matrix(1, ncol = ncol(mat1))
one2 <- matrix(1, ncol = ncol(mat2))

rbind(mat1 %x% one2, one1 %x% mat2)

rbind(one2 %x% mat1, mat2 %x% one1)

取决于您首先想要回收的组合矩阵。

答案 1 :(得分:2)

使用expand.grid的另一种可能解决方案:

idx = expand.grid((1:ncol(mat1)),(1:ncol(mat2)))

rbind(mat1[,idx[,1]], mat2[,idx[,2]])

对任意数量矩阵的推广:

mat.list <- list(mat1, mat2)
idx <- expand.grid(lapply(lapply(mat.list, ncol), seq_len))
do.call(rbind, mapply(function(x, j)x[, j], mat.list, idx))