Unión diagonal de bloques de matrices

¿Tiene R una función base para unir matrices en una forma diagonal de bloques?

El siguiente hace el trabajo, pero me gustaría saber si hay una forma estándar:

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 

adiag de un paquete magic hace lo que quieres:

 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 

Alternativamente, puede usar un paquete Matrix y función 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 

que devuelve una matriz dispersa y que podría ser más eficiente. Usa as.matrix(bdiag(a,b)) para obtener una regular.