R:每次将一个矩阵中的一行与另一个矩阵中的所有行合并

R:每次将一个矩阵中的一行与另一个矩阵中的所有行合并,r,matrix,R,Matrix,我有两个矩阵(expmat和mat)。 假设expmat是 [1,] -1 -1 -1 -1 -1 [2,] 1 -1 -1 -1 -1 [3,] -1 1 -1 -1 -1 [4,] 1 1 -1 -1 -1 [5,] -1 -1 1 -1 -1 [6,] 1 -1 1 -1 -1 [7,] -1 1 1 -1 -1 [8

我有两个矩阵(
expmat
mat
)。 假设
expmat

 [1,]   -1   -1   -1   -1   -1
 [2,]    1   -1   -1   -1   -1
 [3,]   -1    1   -1   -1   -1
 [4,]    1    1   -1   -1   -1
 [5,]   -1   -1    1   -1   -1
 [6,]    1   -1    1   -1   -1
 [7,]   -1    1    1   -1   -1
 [8,]    1    1    1   -1   -1
并且
mat

[1,]   -2   -2   -2   -2   -2
[2,]    2   -2   -2   -2   -2
[3,]   -2    2   -2   -2   -2
[4,]    2    2   -2   -2   -2
[5,]   -2   -2    2   -2   -2
[6,]    2   -2    2   -2   -2
[7,]   -2    2    2   -2   -2
当我在每个循环中将
expmat
中的一行连接到mat中的所有行时,我想创建一个循环,以便在末尾创建8个矩阵,每个矩阵中的前5列完全相同(来自
expmat
的行),并且其他列由于来自mat而发生变化。例如,给定示例的前2个矩阵如下所示

Matrix1
-1   -1   -1   -1   -1   -2   -2   -2   -2   -2
-1   -1   -1   -1   -1    2   -2   -2   -2   -2
-1   -1   -1   -1   -1   -2    2   -2   -2   -2
-1   -1   -1   -1   -1    2    2   -2   -2   -2
-1   -1   -1   -1   -1   -2   -2    2   -2   -2
-1   -1   -1   -1   -1    2   -2    2   -2   -2
-1   -1   -1   -1   -1   -2    2    2   -2   -2

Matrix 2
1   -1   -1   -1   -1   -2   -2   -2   -2   -2
1   -1   -1   -1   -1    2   -2   -2   -2   -2
1   -1   -1   -1   -1   -2    2   -2   -2   -2
1   -1   -1   -1   -1    2    2   -2   -2   -2
1   -1   -1   -1   -1   -2   -2    2   -2   -2
1   -1   -1   -1   -1    2   -2    2   -2   -2
1   -1   -1   -1   -1   -2    2    2   -2   -2
这就是我正在做的:

for(row in 1:nrow(expmat)) {
for(row in 1:nrow(expmat)) {
val<-expmat[row,]
val<-as.matrix(val)
dshybrid=merge(t(val),mat, by=0, all=TRUE)
print(dshybrid)}

这种方法可以实现以下目的:

lapply(split(expmat, row(expmat)), function(u){
  cbind(matrix(rep(u,nrow(mat)), ncol=ncol(mat), byrow=T), mat)
})

基本上,
split
将列出
expmat
行,然后每行复制7次并与
mat
矩阵合并。这将为您提供所需的8个矩阵。

expmat
的每一行上循环,
cbind
-将其添加到
mat

lapply(1:nrow(expmat), function(x) cbind(expmat[rep(x,nrow(mat)),],mat) )
需要使用
rep
,以便将
expmat
的每一行加入到
mat
中,重复执行该行。例如,一个非常简单的例子:

expmat <- matrix(1:4,nrow=2)
mat    <- matrix(5:8,nrow=2)
lapply(1:nrow(expmat), function(x) cbind(expmat[rep(x,nrow(mat)),],mat) )

#[[1]]
#     [,1] [,2] [,3] [,4]
#[1,]    1    3    5    7
#[2,]    1    3    6    8
#
#[[2]]
#     [,1] [,2] [,3] [,4]
#[1,]    2    4    5    7
#[2,]    2    4    6    8
expmat
expmat <- matrix(1:4,nrow=2)
mat    <- matrix(5:8,nrow=2)
lapply(1:nrow(expmat), function(x) cbind(expmat[rep(x,nrow(mat)),],mat) )

#[[1]]
#     [,1] [,2] [,3] [,4]
#[1,]    1    3    5    7
#[2,]    1    3    6    8
#
#[[2]]
#     [,1] [,2] [,3] [,4]
#[1,]    2    4    5    7
#[2,]    2    4    6    8