将非常大的R S4 DGC矩阵转换为数据帧

将非常大的R S4 DGC矩阵转换为数据帧,r,dataframe,sparse-matrix,seurat,R,Dataframe,Sparse Matrix,Seurat,我有一个非常大的稀疏矩阵(4941643682个元素,内存中有5.6Gb的R对象),我需要将其转换为3列data.frame(行、列、值),然后将其转储到文本文件中进行进一步处理 我曾经尝试过“summary”方法,但没有成功(我以前在其他数据集中成功地使用过这种方法)。由于数据的“S4性质”,summary方法不再返回矩阵,而只返回此描述 > typeof(mat) [1] "S4" > summary(mat) Length Class

我有一个非常大的稀疏矩阵(4941643682个元素,内存中有5.6Gb的R对象),我需要将其转换为3列data.frame(行、列、值),然后将其转储到文本文件中进行进一步处理

我曾经尝试过“summary”方法,但没有成功(我以前在其他数据集中成功地使用过这种方法)。由于数据的“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
这些数据来自一个hdf5文件,我必须使用Seurat包打开该文件

library(Seurat)
library(hdf5r)

tt<-ReadH5AD(file = "input.h5ad",assay = "RNA", layers = "data", verbose = TRUE)

mat<-GetAssayData(tt, assay="RNA",slot="data")
库(Seurat)
库(hdf5r)

ttTry
选择方法(“摘要”、“dgCMatrix”)(mat)
class(mat)
返回什么?显然,您无法将如此大的稀疏矩阵转换为密集矩阵(使用
matrix
as.matrix
)。噢,谢谢!那很有效!顺便说一句,类(mat)返回了
>类(mat)[1]“dgCMatrix”attr(,“package”)[1]“Matrix”
不知道为什么方法调度不能正常工作。可能值得向Seurat维护人员报告这一点。“将其转储到文本文件中”-我非常确定MatrixMarket格式基本上是一个(行、列、值)文本文件,因此它看起来像是
Matrix::writeMM(mat,“mat.mtx”)
可以工作,即跳过中间转换。尝试
selectMethod(“summary”,“dgCMatrix”)(mat)
class(mat)
返回什么?显然,您无法将如此大的稀疏矩阵转换为密集矩阵(使用
matrix
as.matrix
)。噢,谢谢!那很有效!顺便说一句,类(mat)返回了
>类(mat)[1]“dgCMatrix”attr(,“package”)[1]“Matrix”
不知道为什么方法调度不能正常工作。可能值得向Seurat维护人员报告这一点。“将其转储到文本文件中”-我非常确定MatrixMarket格式基本上是一个(行、列、值)文本文件,因此它似乎可以工作,即跳过中间转换。