我想创建一个由一系列较小的矩阵组成的大型矩阵。有30个小型的30 x 3153矩阵。每个只有1行,其余均为0。1s行的位置从1到30。例如,在第1个矩阵中,1s在第1行,第2个矩阵在第2行,依此类推。
由于我是编程新手,所以我不确定如何使用循环函数来实现此目的。我不知道如何将变量传递给循环函数。
这是我尝试过的。
我对如何使用循环来完成此工作感到困惑。如果有人可以帮助我,我将不胜感激。谢谢
vec0=rep.int(0,n)
vec1=rep.int(1,n)
uij=matrix(rep(vec0,c-1),nrow=c-1,ncol=n)
Uij=cbind(lapply(uij,insertRow(uij,i,vec1)))
hold_mat <- list()
for(i in seq(30)){
mat <- matrix(0, nrow = 30, ncol = 3153)
mat[i, ] <- 1
hold_mat[[i]] <- mat
}
bigMatrix <- do.call(rbind, hold_mat)
编辑:这是从Matrix
程序包中使用稀疏矩阵的解决方案:
library(Matrix)
numRows <- 30
numCols <- 3152
hold_mat <- lapply(seq(numRows), function(k) sparseMatrix(i = rep(k, numCols), j = seq(numCols), dims = c(numRows, numCols)))
bigMatrix <- do.call(rBind, hold_mat)
> str(bigMatrix)
Formal class 'ngCMatrix' [package "Matrix"] with 5 slots
..@ i : int [1:94560] 0 31 62 93 124 155 186 217 248 279 ...
..@ p : int [1:3153] 0 30 60 90 120 150 180 210 240 270 ...
..@ Dim : int [1:2] 900 3152
..@ Dimnames:List of 2
.. ..$ : NULL
.. ..$ : NULL
..@ factors : list()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句