我希望在包abind中使用abind函数将大量的2d对象(M1,M2 .....)连接成一个3d数组
如果我这样做:
abind(M_1, M_2, M_3, M_4, along=3)
我得到了理想的结果
但如果我生成一个列表矩阵:
list_matrix <- list(ls(pattern="M_"))
然后:
abind(list_matrix, along=3)
我收到错误。
我错过了一些明显的东西吗?我想使用list_matrix来避免手动写出M1等。
答案 0 :(得分:1)
如果我们需要list
个矩阵,那么只需使用mget
list_matrix <- mget(ls(pattern="M_\\d+"))
或3D数组,然后使用list
do.call
转换为数组
ar1 <- do.call(abind, c(list_matrix, along = 3))
OP的代码
ar2 <- abind(M_1, M_2, M_3, M_4, along=3)
all.equal(ar1, ar2, check.attributes = FALSE)
#[1] TRUE
或者@thelatemail提到
abind(list_matrix, along=3)
M_1 <- matrix(1:25, 5 , 5)
M_2 <- matrix(26:50, 5, 5)
M_3 <- matrix(51:75, 5, 5)
M_4 <- matrix(76:100, 5, 5)