cbind列表的每个矩阵与另一个列表中每个矩阵的每一行
cbind each matrix of list with each row of each matrix in another list
制作方法
第一个有 3 个元素。每个元素都是5*4的矩阵。我们称这些元素为 m1
、m2
、m3
第二个也有3个元素。每个元素都是5*4的矩阵。我们称这些元素为 n1
、n2
、n3
set.seed(1001)
first<-replicate(3,list(matrix(unlist(replicate(5,sample(c(1,2,3,4),4,replace=TRUE))),ncol=4)))
second<-replicate(3,list(matrix(unlist(replicate(5,sample(c(5,6,7,8),4,replace=TRUE))),ncol=4)))
> first
[[1]]
[,1] [,2] [,3] [,4]
[1,] 4 4 2 4
[2,] 2 1 1 1
[3,] 2 1 4 2
[4,] 2 2 2 1
[5,] 2 4 2 4
[[2]]
[,1] [,2] [,3] [,4]
[1,] 3 4 3 1
[2,] 2 3 4 1
[3,] 4 2 4 3
[4,] 3 4 2 3
[5,] 2 2 1 1
[[3]]
[,1] [,2] [,3] [,4]
[1,] 2 1 2 3
[2,] 1 4 2 2
[3,] 3 1 1 1
[4,] 1 3 3 1
[5,] 4 3 3 4
> second
[[1]]
[,1] [,2] [,3] [,4]
[1,] 7 7 8 5
[2,] 7 8 8 5
[3,] 7 5 8 7
[4,] 6 5 8 7
[5,] 6 6 6 5
[[2]]
[,1] [,2] [,3] [,4]
[1,] 6 7 8 8
[2,] 8 5 7 7
[3,] 7 6 5 8
[4,] 6 6 5 8
[5,] 7 6 7 5
[[3]]
[,1] [,2] [,3] [,4]
[1,] 5 7 7 6
[2,] 6 8 6 8
[3,] 5 5 5 5
[4,] 7 7 7 6
[5,] 5 8 8 5
我想要的是将 first
中的每个元素与 second
中每个元素的每一列进行绑定。
n1
有 4 列。我们将每一列称为 n1c1
、n1c2
、n1c3
、n1c4
.
所以,我要生成m1
+n1c1
,m1
+n1c2
,m1
+n1c3
,m1
+n1c4
.
其他情况依此类推
m2
+n2c1
, m2
+n2c2
, m2
+n2c3
, m2
+n2c4
m3
+n3c1
, m3
+n3c2
, m3
+n3c3
, m3
+n3c4
这些会是这样的。
[[1]]
[,1] [,2] [,3] [,4] [,5]
[1,] 4 4 2 4 7
[2,] 2 1 1 1 7
[3,] 2 1 4 2 7
[4,] 2 2 2 1 6
[5,] 2 4 2 4 6
[[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] 4 4 2 4 7
[2,] 2 1 1 1 8
[3,] 2 1 4 2 5
[4,] 2 2 2 1 5
[5,] 2 4 2 4 6
[[3]]
[,1] [,2] [,3] [,4] [,5]
[1,] 4 4 2 4 8
[2,] 2 1 1 1 8
[3,] 2 1 4 2 8
[4,] 2 2 2 1 8
[5,] 2 4 2 4 6
...
[[12]]
[,1] [,2] [,3] [,4] [,5]
[1,] 2 1 2 3 6
[2,] 1 4 2 2 8
[3,] 3 1 1 1 5
[4,] 1 3 3 1 6
[5,] 4 3 3 4 5
我试过这些代码。但这一切都失败了。
out<-lapply(first, function(x) (cbind(first, second=x)))
out
[[1]]
first
[1,] Numeric,20 1 1 4 2
[2,] Numeric,20 2 2 1 4
[3,] Numeric,20 4 1 4 3
[4,] Numeric,20 4 4 2 1
[5,] Numeric,20 2 3 4 4
[[2]]
first
[1,] Numeric,20 1 3 1 4
[2,] Numeric,20 3 1 3 2
[3,] Numeric,20 2 2 4 1
[4,] Numeric,20 4 4 3 3
[5,] Numeric,20 2 4 1 3
[[3]]
first
[1,] Numeric,20 3 1 4 1
[2,] Numeric,20 4 2 2 1
[3,] Numeric,20 3 2 1 1
[4,] Numeric,20 2 2 3 1
[5,] Numeric,20 2 1 4 4
(我都不知道什么是'Numeric,20'!)
这甚至失败了。
out<-lapply(first, function(x) lapply(1:nrow(x), function(y) cbind(first, second=y)))
out
[[1]]
[[1]][[1]]
first second
[1,] Numeric,20 1
[2,] Numeric,20 1
[3,] Numeric,20 1
[[1]][[2]]
first second
[1,] Numeric,20 2
[2,] Numeric,20 2
[3,] Numeric,20 2
[[1]][[3]]
first second
[1,] Numeric,20 3
[2,] Numeric,20 3
[3,] Numeric,20 3
[[1]][[4]]
first second
[1,] Numeric,20 4
[2,] Numeric,20 4
[3,] Numeric,20 4
[[1]][[5]]
first second
[1,] Numeric,20 5
[2,] Numeric,20 5
[3,] Numeric,20 5
[[2]]
[[2]][[1]]
first second
[1,] Numeric,20 1
[2,] Numeric,20 1
[3,] Numeric,20 1
[[2]][[2]]
first second
[1,] Numeric,20 2
[2,] Numeric,20 2
[3,] Numeric,20 2
[[2]][[3]]
first second
[1,] Numeric,20 3
[2,] Numeric,20 3
[3,] Numeric,20 3
[[2]][[4]]
first second
[1,] Numeric,20 4
[2,] Numeric,20 4
[3,] Numeric,20 4
[[2]][[5]]
first second
[1,] Numeric,20 5
[2,] Numeric,20 5
[3,] Numeric,20 5
[[3]]
[[3]][[1]]
first second
[1,] Numeric,20 1
[2,] Numeric,20 1
[3,] Numeric,20 1
[[3]][[2]]
first second
[1,] Numeric,20 2
[2,] Numeric,20 2
[3,] Numeric,20 2
[[3]][[3]]
first second
[1,] Numeric,20 3
[2,] Numeric,20 3
[3,] Numeric,20 3
[[3]][[4]]
first second
[1,] Numeric,20 4
[2,] Numeric,20 4
[3,] Numeric,20 4
[[3]][[5]]
first second
[1,] Numeric,20 5
[2,] Numeric,20 5
[3,] Numeric,20 5
(这看起来很相似,但也失败了。)
我该如何解决这个问题?
您可以尝试使用嵌套 lapply
lapply(seq_along(first), function(x) lapply(seq_len(ncol(second[[x]])),
function(y) cbind(first[[x]], second[[x]][, y])))
#[[1]]
#[[1]][[1]]
# [,1] [,2] [,3] [,4] [,5]
#[1,] 4 4 2 4 7
#[2,] 2 1 1 1 7
#[3,] 2 1 4 2 7
#[4,] 2 2 2 1 6
#[5,] 2 4 2 4 6
#[[1]][[2]]
# [,1] [,2] [,3] [,4] [,5]
#[1,] 4 4 2 4 7
#[2,] 2 1 1 1 8
#[3,] 2 1 4 2 5
#[4,] 2 2 2 1 5
#[5,] 2 4 2 4 6
#....
或者使用 Map
稍微短一点
Map(function(x, y) lapply(seq_len(ncol(y)), function(i) cbind(x, y[,i])),
first, second)
您可以使用 expand.grid
Map(function(x) cbind(first[[x[1]]], second[[x[1]]][, x[2]]),
data.frame(t(rev(expand.grid(seq(ncol(first[[1]])), seq(length(second)))))))
产量
# $X1
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 3 4 1 5
# [2,] 3 4 4 1 8
# [3,] 3 3 4 3 5
# [4,] 3 2 4 2 8
# [5,] 4 2 4 3 6
#
# $X2
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 3 4 1 8
# [2,] 3 4 4 1 7
# [3,] 3 3 4 3 6
# [4,] 3 2 4 2 7
# [5,] 4 2 4 3 6
#
# $X3
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 3 4 1 8
# [2,] 3 4 4 1 8
# [3,] 3 3 4 3 6
# [4,] 3 2 4 2 6
# [5,] 4 2 4 3 8
#
# $X4
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 3 4 1 8
# [2,] 3 4 4 1 5
# [3,] 3 3 4 3 5
# [4,] 3 2 4 2 5
# [5,] 4 2 4 3 7
#
# $X5
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 2 4 5
# [2,] 2 4 3 1 7
# [3,] 4 2 4 4 7
# [4,] 3 3 1 2 6
# [5,] 4 2 2 4 7
#
# $X6
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 2 4 7
# [2,] 2 4 3 1 7
# [3,] 4 2 4 4 6
# [4,] 3 3 1 2 6
# [5,] 4 2 2 4 7
#
# $X7
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 2 4 5
# [2,] 2 4 3 1 5
# [3,] 4 2 4 4 8
# [4,] 3 3 1 2 6
# [5,] 4 2 2 4 6
#
# $X8
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 2 4 6
# [2,] 2 4 3 1 5
# [3,] 4 2 4 4 8
# [4,] 3 3 1 2 5
# [5,] 4 2 2 4 6
#
# $X9
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 1 1 1 7
# [2,] 2 2 1 2 6
# [3,] 2 4 3 4 7
# [4,] 2 3 1 4 5
# [5,] 4 1 4 4 6
#
# $X10
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 1 1 1 7
# [2,] 2 2 1 2 8
# [3,] 2 4 3 4 5
# [4,] 2 3 1 4 6
# [5,] 4 1 4 4 6
#
# $X11
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 1 1 1 5
# [2,] 2 2 1 2 6
# [3,] 2 4 3 4 8
# [4,] 2 3 1 4 6
# [5,] 4 1 4 4 7
#
# $X12
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 1 1 1 8
# [2,] 2 2 1 2 8
# [3,] 2 4 3 4 5
# [4,] 2 3 1 4 7
# [5,] 4 1 4 4 7
数据
first <- list(structure(c(3, 3, 3, 3, 4, 3, 4, 3, 2, 2, 4, 4, 4, 4, 4,
1, 1, 3, 2, 3), .Dim = 5:4), structure(c(2, 2, 4, 3, 4, 1, 4,
2, 3, 2, 2, 3, 4, 1, 2, 4, 1, 4, 2, 4), .Dim = 5:4), structure(c(3,
2, 2, 2, 4, 1, 2, 4, 3, 1, 1, 1, 3, 1, 4, 1, 2, 4, 4, 4), .Dim = 5:4))
second <- list(structure(c(5, 8, 5, 8, 6, 8, 7, 6, 7, 6, 8, 8, 6, 6, 8,
8, 5, 5, 5, 7), .Dim = 5:4), structure(c(5, 7, 7, 6, 7, 7, 7,
6, 6, 7, 5, 5, 8, 6, 6, 6, 5, 8, 5, 6), .Dim = 5:4), structure(c(7,
6, 7, 5, 6, 7, 8, 5, 6, 6, 5, 6, 8, 6, 7, 8, 8, 5, 7, 7), .Dim = 5:4))
制作方法
第一个有 3 个元素。每个元素都是5*4的矩阵。我们称这些元素为 m1
、m2
、m3
第二个也有3个元素。每个元素都是5*4的矩阵。我们称这些元素为 n1
、n2
、n3
set.seed(1001)
first<-replicate(3,list(matrix(unlist(replicate(5,sample(c(1,2,3,4),4,replace=TRUE))),ncol=4)))
second<-replicate(3,list(matrix(unlist(replicate(5,sample(c(5,6,7,8),4,replace=TRUE))),ncol=4)))
> first
[[1]]
[,1] [,2] [,3] [,4]
[1,] 4 4 2 4
[2,] 2 1 1 1
[3,] 2 1 4 2
[4,] 2 2 2 1
[5,] 2 4 2 4
[[2]]
[,1] [,2] [,3] [,4]
[1,] 3 4 3 1
[2,] 2 3 4 1
[3,] 4 2 4 3
[4,] 3 4 2 3
[5,] 2 2 1 1
[[3]]
[,1] [,2] [,3] [,4]
[1,] 2 1 2 3
[2,] 1 4 2 2
[3,] 3 1 1 1
[4,] 1 3 3 1
[5,] 4 3 3 4
> second
[[1]]
[,1] [,2] [,3] [,4]
[1,] 7 7 8 5
[2,] 7 8 8 5
[3,] 7 5 8 7
[4,] 6 5 8 7
[5,] 6 6 6 5
[[2]]
[,1] [,2] [,3] [,4]
[1,] 6 7 8 8
[2,] 8 5 7 7
[3,] 7 6 5 8
[4,] 6 6 5 8
[5,] 7 6 7 5
[[3]]
[,1] [,2] [,3] [,4]
[1,] 5 7 7 6
[2,] 6 8 6 8
[3,] 5 5 5 5
[4,] 7 7 7 6
[5,] 5 8 8 5
我想要的是将 first
中的每个元素与 second
中每个元素的每一列进行绑定。
n1
有 4 列。我们将每一列称为 n1c1
、n1c2
、n1c3
、n1c4
.
所以,我要生成m1
+n1c1
,m1
+n1c2
,m1
+n1c3
,m1
+n1c4
.
其他情况依此类推
m2
+n2c1
, m2
+n2c2
, m2
+n2c3
, m2
+n2c4
m3
+n3c1
, m3
+n3c2
, m3
+n3c3
, m3
+n3c4
这些会是这样的。
[[1]]
[,1] [,2] [,3] [,4] [,5]
[1,] 4 4 2 4 7
[2,] 2 1 1 1 7
[3,] 2 1 4 2 7
[4,] 2 2 2 1 6
[5,] 2 4 2 4 6
[[2]]
[,1] [,2] [,3] [,4] [,5]
[1,] 4 4 2 4 7
[2,] 2 1 1 1 8
[3,] 2 1 4 2 5
[4,] 2 2 2 1 5
[5,] 2 4 2 4 6
[[3]]
[,1] [,2] [,3] [,4] [,5]
[1,] 4 4 2 4 8
[2,] 2 1 1 1 8
[3,] 2 1 4 2 8
[4,] 2 2 2 1 8
[5,] 2 4 2 4 6
...
[[12]]
[,1] [,2] [,3] [,4] [,5]
[1,] 2 1 2 3 6
[2,] 1 4 2 2 8
[3,] 3 1 1 1 5
[4,] 1 3 3 1 6
[5,] 4 3 3 4 5
我试过这些代码。但这一切都失败了。
out<-lapply(first, function(x) (cbind(first, second=x)))
out
[[1]]
first
[1,] Numeric,20 1 1 4 2
[2,] Numeric,20 2 2 1 4
[3,] Numeric,20 4 1 4 3
[4,] Numeric,20 4 4 2 1
[5,] Numeric,20 2 3 4 4
[[2]]
first
[1,] Numeric,20 1 3 1 4
[2,] Numeric,20 3 1 3 2
[3,] Numeric,20 2 2 4 1
[4,] Numeric,20 4 4 3 3
[5,] Numeric,20 2 4 1 3
[[3]]
first
[1,] Numeric,20 3 1 4 1
[2,] Numeric,20 4 2 2 1
[3,] Numeric,20 3 2 1 1
[4,] Numeric,20 2 2 3 1
[5,] Numeric,20 2 1 4 4
(我都不知道什么是'Numeric,20'!)
这甚至失败了。
out<-lapply(first, function(x) lapply(1:nrow(x), function(y) cbind(first, second=y)))
out
[[1]]
[[1]][[1]]
first second
[1,] Numeric,20 1
[2,] Numeric,20 1
[3,] Numeric,20 1
[[1]][[2]]
first second
[1,] Numeric,20 2
[2,] Numeric,20 2
[3,] Numeric,20 2
[[1]][[3]]
first second
[1,] Numeric,20 3
[2,] Numeric,20 3
[3,] Numeric,20 3
[[1]][[4]]
first second
[1,] Numeric,20 4
[2,] Numeric,20 4
[3,] Numeric,20 4
[[1]][[5]]
first second
[1,] Numeric,20 5
[2,] Numeric,20 5
[3,] Numeric,20 5
[[2]]
[[2]][[1]]
first second
[1,] Numeric,20 1
[2,] Numeric,20 1
[3,] Numeric,20 1
[[2]][[2]]
first second
[1,] Numeric,20 2
[2,] Numeric,20 2
[3,] Numeric,20 2
[[2]][[3]]
first second
[1,] Numeric,20 3
[2,] Numeric,20 3
[3,] Numeric,20 3
[[2]][[4]]
first second
[1,] Numeric,20 4
[2,] Numeric,20 4
[3,] Numeric,20 4
[[2]][[5]]
first second
[1,] Numeric,20 5
[2,] Numeric,20 5
[3,] Numeric,20 5
[[3]]
[[3]][[1]]
first second
[1,] Numeric,20 1
[2,] Numeric,20 1
[3,] Numeric,20 1
[[3]][[2]]
first second
[1,] Numeric,20 2
[2,] Numeric,20 2
[3,] Numeric,20 2
[[3]][[3]]
first second
[1,] Numeric,20 3
[2,] Numeric,20 3
[3,] Numeric,20 3
[[3]][[4]]
first second
[1,] Numeric,20 4
[2,] Numeric,20 4
[3,] Numeric,20 4
[[3]][[5]]
first second
[1,] Numeric,20 5
[2,] Numeric,20 5
[3,] Numeric,20 5
(这看起来很相似,但也失败了。)
我该如何解决这个问题?
您可以尝试使用嵌套 lapply
lapply(seq_along(first), function(x) lapply(seq_len(ncol(second[[x]])),
function(y) cbind(first[[x]], second[[x]][, y])))
#[[1]]
#[[1]][[1]]
# [,1] [,2] [,3] [,4] [,5]
#[1,] 4 4 2 4 7
#[2,] 2 1 1 1 7
#[3,] 2 1 4 2 7
#[4,] 2 2 2 1 6
#[5,] 2 4 2 4 6
#[[1]][[2]]
# [,1] [,2] [,3] [,4] [,5]
#[1,] 4 4 2 4 7
#[2,] 2 1 1 1 8
#[3,] 2 1 4 2 5
#[4,] 2 2 2 1 5
#[5,] 2 4 2 4 6
#....
或者使用 Map
Map(function(x, y) lapply(seq_len(ncol(y)), function(i) cbind(x, y[,i])),
first, second)
您可以使用 expand.grid
Map(function(x) cbind(first[[x[1]]], second[[x[1]]][, x[2]]),
data.frame(t(rev(expand.grid(seq(ncol(first[[1]])), seq(length(second)))))))
产量
# $X1
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 3 4 1 5
# [2,] 3 4 4 1 8
# [3,] 3 3 4 3 5
# [4,] 3 2 4 2 8
# [5,] 4 2 4 3 6
#
# $X2
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 3 4 1 8
# [2,] 3 4 4 1 7
# [3,] 3 3 4 3 6
# [4,] 3 2 4 2 7
# [5,] 4 2 4 3 6
#
# $X3
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 3 4 1 8
# [2,] 3 4 4 1 8
# [3,] 3 3 4 3 6
# [4,] 3 2 4 2 6
# [5,] 4 2 4 3 8
#
# $X4
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 3 4 1 8
# [2,] 3 4 4 1 5
# [3,] 3 3 4 3 5
# [4,] 3 2 4 2 5
# [5,] 4 2 4 3 7
#
# $X5
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 2 4 5
# [2,] 2 4 3 1 7
# [3,] 4 2 4 4 7
# [4,] 3 3 1 2 6
# [5,] 4 2 2 4 7
#
# $X6
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 2 4 7
# [2,] 2 4 3 1 7
# [3,] 4 2 4 4 6
# [4,] 3 3 1 2 6
# [5,] 4 2 2 4 7
#
# $X7
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 2 4 5
# [2,] 2 4 3 1 5
# [3,] 4 2 4 4 8
# [4,] 3 3 1 2 6
# [5,] 4 2 2 4 6
#
# $X8
# [,1] [,2] [,3] [,4] [,5]
# [1,] 2 1 2 4 6
# [2,] 2 4 3 1 5
# [3,] 4 2 4 4 8
# [4,] 3 3 1 2 5
# [5,] 4 2 2 4 6
#
# $X9
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 1 1 1 7
# [2,] 2 2 1 2 6
# [3,] 2 4 3 4 7
# [4,] 2 3 1 4 5
# [5,] 4 1 4 4 6
#
# $X10
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 1 1 1 7
# [2,] 2 2 1 2 8
# [3,] 2 4 3 4 5
# [4,] 2 3 1 4 6
# [5,] 4 1 4 4 6
#
# $X11
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 1 1 1 5
# [2,] 2 2 1 2 6
# [3,] 2 4 3 4 8
# [4,] 2 3 1 4 6
# [5,] 4 1 4 4 7
#
# $X12
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 1 1 1 8
# [2,] 2 2 1 2 8
# [3,] 2 4 3 4 5
# [4,] 2 3 1 4 7
# [5,] 4 1 4 4 7
数据
first <- list(structure(c(3, 3, 3, 3, 4, 3, 4, 3, 2, 2, 4, 4, 4, 4, 4,
1, 1, 3, 2, 3), .Dim = 5:4), structure(c(2, 2, 4, 3, 4, 1, 4,
2, 3, 2, 2, 3, 4, 1, 2, 4, 1, 4, 2, 4), .Dim = 5:4), structure(c(3,
2, 2, 2, 4, 1, 2, 4, 3, 1, 1, 1, 3, 1, 4, 1, 2, 4, 4, 4), .Dim = 5:4))
second <- list(structure(c(5, 8, 5, 8, 6, 8, 7, 6, 7, 6, 8, 8, 6, 6, 8,
8, 5, 5, 5, 7), .Dim = 5:4), structure(c(5, 7, 7, 6, 7, 7, 7,
6, 6, 7, 5, 5, 8, 6, 6, 6, 5, 8, 5, 6), .Dim = 5:4), structure(c(7,
6, 7, 5, 6, 7, 8, 5, 6, 6, 5, 6, 8, 6, 7, 8, 8, 5, 7, 7), .Dim = 5:4))