将稀疏矩阵写入R中的CSV

Jar*_*red 4 statistics r matrix sparse-matrix

我有一个稀疏矩阵(dgCMatrix)作为拟合a的结果glmnet.我想把这个结果写成一个.csv但不能使用write.table()矩阵,因为它不能强制转换成一个data.frame.

有没有办法将稀疏矩阵强制为a data.frame或常规矩阵?或者有没有办法将它写入文件,同时保留可能是行名称的系数名称?

Ens*_*der 10

如果稀疏矩阵大小太大,那么将稀疏矩阵变换为正常矩阵将是危险的.在我的情况下(文本分类任务),我得到了一个大小为22490×120,000的矩阵.如果你尝试获得密集矩阵,我认为这将超过20 GB.然后R会崩溃!

所以我的建议是,您可以简单地以有效且内存友好的方式存储稀疏矩阵,例如Matrix Market Format,它保留所有非零值及其坐标(行和列号).在R中你可以使用writeMM方法


Rei*_*son 6

as.matrix() 将转换为完全密集的表示形式:

> as.matrix(Matrix(0, 3, 2))
     [,1] [,2]
[1,]    0    0
[2,]    0    0
[3,]    0    0
Run Code Online (Sandbox Code Playgroud)

您可以使用write.csv或将结果对象写出来write.table


Wil*_*nes 6

直接转换为稠密矩阵很可能会浪费大量内存。R 包 Matrix 允许使用该summary()函数将稀疏矩阵转换为内存高效的坐标三元组格式数据帧,然后可以轻松地将其写入 csv。这可能比矩阵市场方法更简单、更容易。请参阅此相关问题的答案:Sparse matrix to a data frame in R

此外,这里是Matrix 包文档中的插图:

## very simple export - in triplet format - to text file:
data(CAex)
s.CA <- summary(CAex)
s.CA # shows  (i, j, x)  [columns of a data frame]
message("writing to ", outf <- tempfile())
write.table(s.CA, file = outf, row.names=FALSE)
## and read it back -- showing off  sparseMatrix():
str(dd <- read.table(outf, header=TRUE))
## has columns (i, j, x) -> we can use via do.call() as arguments to sparseMatrix():
mm <- do.call(sparseMatrix, dd)
stopifnot(all.equal(mm, CAex, tolerance=1e-15))
Run Code Online (Sandbox Code Playgroud)