背景介绍
最近,一位师兄问我有哪些输出单细胞大数据矩阵的方法,于是趁机整理了一下我平时遇到的保存单细胞矩阵的有关脚本,总共有四个方法,分别保存为csv.gz、loom、h5和10X矩阵目录的四种格式。
方法一 保存为csv.gz文件
虽然write.table系列函数也能保存为csv文件,但是对于大数据写入和读入都太慢了,而data.table包的fread和fwrite则相关更快,功能也更强大。
以Seurat自带的数据集pbmc_small为例,保存矩阵的脚本如下:
library(Seurat)
library(data.table)
fwrite(data.table(as.matrix(pbmc_small@assays$RNA@counts),keep.rownames=TRUE),'pbmc_small.csv.gz',sep=',',quote=F,compress = 'gzip',row.names=F,col.names=T)
读入矩阵脚本如下:
mat <- fread('pbmc_small.csv.gz',sep=',')
方法二 保存为loom文件
这是从SCENIC的流程中学到的方法,开发人员专门写了一个SCopeLoomR包,据说保存的大矩阵较快而且比较省内存。
保存脚本如下:
library(Seurat)
library(SCopeLoomR)
label1 <- 'pbmc_small'
assay <- 'RNA'
outloom <- paste0(label1,".loom")
build_loom(file.name = outloom,dgem = pbmc_small@assays[[assay]]@counts)
读入脚本如下:
loom <- open_loom(file.path = outloom, mode = "r+")
mat <- get_dgem(loom)
close_loom(loom)
方法三 保存为h5文件
这是再平时分析中发现保存h5文件比csv文件省很多空间,因此专门整理了一下。
保存脚本如下:
library(Seurat)
library(rhdf5)
mat <- as.matrix(pbmc_small@assays$RNA@counts)
h5createFile("pbmc_small.h5")
h5createGroup("pbmc_small.h5","group")
h5write(mat, "pbmc_small.h5", "group/matrix")
h5write(rownames(mat), "pbmc_small.h5", "group/rownames")
h5write(colnames(mat), "pbmc_small.h5", "group/colnames")
h5closeAll()
读入脚本如下:
h5_file= H5Fopen("pbmc_small.h5")
mat <- h5_file$group$matrix
rownames(mat) <- h5_file$group$rownames
colnames(mat) <- h5_file$group$colnames
H5Fclose(h5_file)
方法四 保存为10X矩阵目录
相信大家做单细胞分析对10X矩阵目录下的三个文件都不陌生,可以使用DropletUtils保存矩阵为10X矩阵目录。
保存脚本如下:
out <- pbmc_small@assays$RNA@counts
DropletUtils:::write10xCounts("./pbmc_small_matrix", out,version="3")
读入矩阵如下:
mat <- Read10X("./pbmc_small_matrix")
总结与讨论
csv文件可读性好,但是太占存储空间了,而loom和h5文件则能极大压缩矩阵文件,但可读性较差,而发文章一般需要上传矩阵,用小文件可能上传更方便一些,而10X矩阵目录格式是单细胞中比较泛用的格式。当然最终保存为哪种格式,得实际情况实际分析。
网友评论