我想建立一个有 10^7
列和 2500
行的矩阵。因为这对我的电脑来说太大了,我想我可以迭代地创建矩阵。我想使用 bigsparser
包将矩阵存储在磁盘上。
这是我创建第一个矩阵的方法:
library(bigsparser)
library(data.table)
library(Matrix)
nvars <- 10000000 # columns
ncons <- 10 # rows
n_nonzero <- round(0.02*nvars*ncons) # approximate, there may be actually less values
set.seed(13)
# the first table
Amat <- data.frame(
i=sample.int(ncons, n_nonzero, replace=TRUE),
j=sample.int(nvars, n_nonzero, replace=TRUE),
x=runif(n_nonzero)
)
setDT(Amat)
Amat <- unique(Amat, by=c("i", "j"))
AmatSparse <- sparseMatrix(
i=Amat[,get("i")], j=Amat[,get("j")], x=Amat[,get("x")],
dims=c(2500, 10^7L)
)
AmatSFBM <- as_SFBM(AmatSparse, backingfile="sparsemat", compact = FALSE)
如您所见,我事先知道最终矩阵的维度并相应地进行了设置。
现在我想添加一些行,像这样:
for (iter in 2:250) {
Amat <- data.frame(
i=sample.int(ncons, n_nonzero, replace=TRUE),
j=sample.int(nvars, n_nonzero, replace=TRUE),
x=runif(n_nonzero)
)
setDT(Amat)
Amat <- unique(Amat, by=c("i", "j"))
Amat[,i:=i+(iter-1)*500]
# this does not work:
AmatSFBM[Amat[,get("i")], Amat[,get("j")]] <- Amat[,get("x")]
}
但是,]<-
运算符似乎不适用于 SFBM
对象。
有什么方法可以从稀疏矩阵构建一个 SFBM
对象而不是 as_SFBM
对象?例如,
两个都可以。