【发布时间】:2014-03-22 05:45:28
【问题描述】:
假设我有一个相同维度的矩阵列表。例如:
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)*ncol(mat) 填充一个尺寸为length(mat.list)*nrow(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表示mat.list中矩阵n中的行和列索引
我认为是这样的:
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 中的一个元素,应该可以工作,但显然我需要一些帮助才能使其真正工作。
【问题讨论】:
标签: r matrix outer-join