从3个不同大小的输入矩阵构建所有可能的3列矩阵

我有三种不同的矩阵:

m1, which has 12 rows and 5 columns;
m2, which has 12 rows and 4 columns; and
m3, which has 12 rows and 1 column.

我试图从中构建一系列3列矩阵(p1到p20),这样在每个p矩阵中:

p[,1] is taken from m1,
p[,2] is taken from m2, and
p[,3] is taken from m3.

我希望这个过程是详尽无遗的,因此我创建了所有20个可能的3列矩阵,因此采样m1,m2和m3(我已经尝试过的解决方案)似乎不起作用.

我尝试了六个不同的for循环,但没有一个完成我想要的,我玩了一些排列函数,但无法弄清楚如何让它们在这种情况下工作.

最终,我正在尝试为未知数量的输入矩阵执行此操作,并且因为我还是R的新手,所以我没有其他关于从哪里开始的想法.任何论坛可以提供的帮助将不胜感激.

最佳答案
## Example matrices
m1 <- matrix(1:4, nrow=2)
m2 <- matrix(1:6, nrow=2)
m3 <- matrix(1:2, nrow=2)

## A function that should do what you're after
f <- function(...) {
    mm <- list(...)
    ii <- expand.grid(lapply(mm, function(X) seq_len(ncol(X))))
    lapply(seq_len(nrow(ii)), function(Z) {
        mapply(FUN=function(X, Y) X[,Y], mm, ii[Z,])
    })
}

## Try it out
f(m1)
f(m1,m2)
f(m1,m2,m3)

转载注明原文:从3个不同大小的输入矩阵构建所有可能的3列矩阵 - 代码日志