多次重复矩阵并得到矩阵名称的向量

时间:2012-10-25 05:31:17

标签: r

我有一个基本矩阵mat,我希望得到一个R对象x = (mat, mat, ...),其中mat重复100次。如果这是可能的,那么我可以将x传递给一个带有矩阵名称向量的函数。我试过rep(mat, 100),但似乎不再维护矩阵类。有什么建议?谢谢!

更新:基本上我打算使用

grp.ids <- as.factor(c(rep(1,8), rep(2,4), rep(3,2)))
x <- model.matrix(~grp.ids)
do.call(blockMatrixDiagonal,
             replicate(100, x, simplify=FALSE))

可以找到blockMatrixDiagonal函数here。然后R给出错误:要替换的项目数不是替换长度的倍数。我真正希望通过这些编码获得的是块对角矩阵。谢谢:))

2 个答案:

答案 0 :(得分:2)

您的输入矩阵不适合构建块对角矩阵,因为它不是方阵(即行数等于列数)。

让我引用块对角矩阵的两个资源。

1)Wikipedia

  

块对角矩阵是块矩阵,它是方矩阵,并且具有主对角块方块矩阵

2)函数blockMatrixDiagonal

的描述
  

构建一个块矩阵,其对角线是所提供的方阵。


您可以将非方形矩阵与包adiag中的函数magic结合使用。使用矩阵x

library(magic)
do.call(adiag, replicate(100, x, simplify = FALSE))

答案 1 :(得分:2)

对于基本R解决方案,请查看kronecker

?kronecker
# For your block diagonal matrix:
kronecker(diag(1, 100), x)
# or with `%x%` alias
diag(1, 100) %x% x

# example 1
m <- matrix(1:6, nrow = 3)
kronecker(diag(1, 2), m)
#      [,1] [,2] [,3] [,4]
# [1,]    1    4    0    0
# [2,]    2    5    0    0
# [3,]    3    6    0    0
# [4,]    0    0    1    4
# [5,]    0    0    2    5
# [6,]    0    0    3    6

# example 2
matrix(1, nrow = 2, ncol = 3) %x% m
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    1    4    1    4    1    4
# [2,]    2    5    2    5    2    5
# [3,]    3    6    3    6    3    6
# [4,]    1    4    1    4    1    4
# [5,]    2    5    2    5    2    5
# [6,]    3    6    3    6    3    6