我有一个非常大的稀疏矩阵(4,941,643,682 个元素,内存中的 5.6Gb R 对象),我需要将其转换为 3 列 data.frame(行、列、值),然后将其转储到文本文件中以进行进一步处理。
我尝试过这里描述的“总结”方法,但没有成功(我之前曾在其他数据集中成功使用过这种方法)。由于数据的“S4 性质”,summary 方法不再返回矩阵,而只是这个描述。
> typeof(mat)
[1] "S4"
> summary(mat)
Length Class Mode
4941643682 dgCMatrix S4
尝试将对象转换为矩阵也不起作用:
> matrix(mat)
Error in as.vector(.Call(Csparse_to_vector, x), mode) :
Cholmod error 'problem too large' at file ../Core/cholmod_dense.c, line 105
此数据来自我必须使用Seurat包打开的 hdf5 文件。
library(Seurat)
library(hdf5r)
tt<-ReadH5AD(file = "input.h5ad",assay = "RNA", layers = "data", verbose = TRUE)
mat<-GetAssayData(tt, assay="RNA",slot="data")
我也尝试过使用 Seurat::as.sparse() 函数,但它返回的 S4 对象类型与我无法转换为 data.frame 的类型相同。并且“as.data.frame”和“as.data.frame.matrix”试图创建一个 245k 列 x 20k 行的 data.frame。
是否有 S4 方法将稀疏矩阵转换为“行名”、“列名”、“值”数据帧?