Допустим, у меня есть список матриц одинаковых размеров. Например:
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
Я хочу заполнить суперматрицу с размерами length (mat.list) * nrow (mat) по длине (mat.list) * ncol (mat) - возможно, инициализированной следующим образом:
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]
}
в сочетании с некоторой функцией apply над mat.list
, которая выполняет:
outer(1:nrow(mat), 1:ncol(mat), Vectorize(function(i,j) populateMat(N,1,i,j,mat,super.mat)))
где здесь mat
- это всего лишь единственный элемент из mat.list
, должен работать, но, очевидно, мне нужна небольшая помощь, чтобы заставить его работать.