2013-07-05 96 views
15

R有一个基本函数来绑定块对角线形状的矩阵吗?矩阵的块对角线绑定

下面做工作,但我想知道是否有一个标准的方法:

a <- matrix(1:6, 2, 3) 
b <- matrix(7:10, 2, 2) 

rbind(cbind(a, matrix(0, nrow=nrow(a), ncol=ncol(b))), 
     cbind(matrix(0, nrow=nrow(b), ncol=ncol(a)), b)) 

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

回答

17

adiag从包magic你想要做什么:

library(magic) 
adiag(a,b) 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1 3 5 0 0 
[2,] 2 4 6 0 0 
[3,] 0 0 0 7 9 
[4,] 0 0 0 8 10 

另外,你可以使用一个包Matrix和功能bdiag

library(Matrix) 
bdiag(a,b) 
4 x 5 sparse Matrix of class "dgCMatrix" 

[1,] 1 3 5 . . 
[2,] 2 4 6 . . 
[3,] . . . 7 9 
[4,] . . . 8 10 

返回一个稀疏矩阵,这可能更有效。使用as.matrix(bdiag(a,b))获得一个常规的。

+1

为'adiag'添加如果你的矩阵存储在列表中(例如'lst <-list(a,b)'),你需要使用'Reduce(adiag,lst)',因为它不会' t似乎知道如何在本地解析列表 – MichaelChirico