【发布时间】:2019-07-09 18:59:35
【问题描述】:
我有一个稀疏矩阵,尺寸约为 400K x ~8k。
我想将其保存为制表符分隔文件或 csv 文件,因为我需要将其作为另一个程序的输入。
按照这篇文章的建议,我使用了 MASS 包中的 write.matrix 函数: How to save an adjacency matrix as a CSV file?
但是,我收到以下错误:
library(MASS)
write.matrix(data,"data_sparseMat.txt",sep="\t")
#Error in asMethod(object) : Cholmod error 'problem too large' at file ../Core/cholmod_dense.c, line 105
查看帮助,然后我尝试提供 blocksize 参数。我尝试了 1000、10000、100000。都给了我同样的错误
write.matrix(data,"data_sparseMat.txt",sep="\t", blocksize=1000)
Error in asMethod(object) :
Cholmod error 'problem too large' at file ../Core/cholmod_dense.c, line 105
如果有任何见解,我将不胜感激,我忽略了什么?
R 版本:
R version 3.5.2 (2018-12-20)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.6
例子:
w <- data.table( "id" = 1:300000 , "code" = paste(letters,1:9000,sep=""), "measure"=1:3000)
w$id <- factor(w$id)
w$code <- factor(w$code)
z<- sparseMatrix(as.integer(w$id),as.integer(w$code),x=w$measure,dimnames=list(levels(w$id),levels(w$code)))
write.matrix(z,"sparseTest.txt",sep="\t")
write.matrix(z,"sparseTest.txt",sep="\t",blocksize=100000)
注意:当代码只是 1000 或 3000 而不是 9000 时,它似乎被写入文件,尽管速度很慢。
非常感谢。
【问题讨论】:
-
您的文件会很大。如果将其保存为文件中的稀疏矩阵会不会更好?
-
MASS::write.matrix的第一行是x <- as.matrix(x),因此您可能会遇到内存限制。如果您将此行注释掉,您可能可以将带有零的矩阵写为.。这是可行的吗/你能在你读到的 prgram 中找到它吗?或者其他程序能否读取mtx文件——见Matrix::writeMM -
400,000 x 8,000 = 3,200,000,000 字节仅用于处理逗号和回车。然后添加您的数据。您将需要更多可用的内存。此外,您将需要一个现代文件系统才能处理文件大小。如果您使用 HFS,则需要使用 7.5.2 或更高版本(如果您的计算机是从以前版本的 MacOS 升级并且最初不是 High Sierra,这可能会出现问题)。如果您将此文件保存到 FAT32 分区,您还会遇到文件太大而无法保存在单个文件中的问题。
-
@user20650:谢谢。另一个程序需要一个选项卡或 csv 文件并且需要 0。但是,我也尝试只用'.'编写稀疏矩阵,我得到了同样的错误。
标签: r bigdata sparse-matrix