假設我有一個等維矩陣列表。例如:基於矩陣列表填充矩陣
mat = matrix(c(1,2,3,11,12,13,21,22,23), nrow = 3, ncol = 3)
mat.list = rep(list(mat), 3)
mat.list[[2]] = mat.list[[2]]*2.5
mat.list[[3]] = mat.list[[3]]*3.5
我要的是長度(mat.list)*的NcoI(墊)來填充尺寸長度(mat.list)* nrow(墊)超級矩陣 - 可能初始化如下:
super.mat = matrix(NA, nrow = length(mat.list)*nrow(mat), ncol = length(mat.list)*ncol(mat))
根據這樣的規則: super.mat [N *(I-1)+ N,N *(J-1)+ N] = mat.list [[N] [I,J ]
其中:
N = length(mat.list)
i和j表示矩陣N的行和列索引mat.list
我想在東西線:
populateMat = function(N, n, i, j, mat, super.mat){
super.mat[N*(i-1)+n,N*(j-1)+n] = mat[i,j]
}
一些聯合應用功能在mat.list
執行:
outer(1:nrow(mat), 1:ncol(mat), Vectorize(function(i,j) populateMat(N,1,i,j,mat,super.mat)))
這裏mat
只是mat.list
的單個元素,應該可以工作,但顯然我需要一些幫助才能真正實現它的工作。