R abind功能与对象列表

时间:2017-02-06 03:39:07

标签: r

我希望在包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等。

1 个答案:

答案 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)