生信单细胞数据 rds mtx转换成h5ad格式

3 阅读1分钟

从 NCBI 下载单细胞数据及格式转换记录

在 NCBI 上下载的单细胞数据常见格式:

  • h5ad:Python scanpy 可以直接读取
  • rds:R Seurat/SingleCellExperiment 对象,Python 直接读有困难
  • mtx:Matrix Market 格式,Python 可以直接读取,结合元信息可组合成 h5ad

1. mtx 格式

  • 可以直接用 Python 读取,例如:
import scanpy as sc
import scipy.io

# 读取 mtx 文件
matrix = scipy.io.mmread("matrix.mtx").T  # 转置为细胞 x 基因
# 加上基因和细胞元信息
import pandas as pd
genes = pd.read_csv("genes.tsv", header=None, sep="\t")
cells = pd.read_csv("barcodes.tsv", header=None, sep="\t")

import anndata
adata = anndata.AnnData(X=matrix.toarray(), var=genes, obs=cells)

完整组合后可以保存为 h5ad 方便后续分析:

adata.write_h5ad("data.h5ad")


2. rds 格式

Python 不一定能直接读取 R 的 rds 文件

推荐 用 R 转换成 h5ad,步骤如下:

2.1 安装依赖包

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("SingleCellExperiment")
BiocManager::install("HDF5Array")
BiocManager::install("zellkonverter")

# Seurat 包
install.packages("Seurat")
install.packages("SeuratDisk")

2.2 读取 rds 并转换

library(Seurat)
library(SeuratDisk)
library(zellkonverter)

rds_path <- "/xxx/xxx.rds"
h5ad_path <- "/xxx/xxx.h5ad"

# 读取 rds
obj <- readRDS(rds_path)

# 转成 SingleCellExperiment 对象
sce <- as.SingleCellExperiment(obj)

# 保存为 h5ad
writeH5AD(sce, h5ad_path)

2.3 错误处理:R 内存限制

R 默认内存限制较小,可能读大 rds 报错

可以解锁限制:

install.packages('usethis')
library(usethis)

usethis::edit_r_environ()

打开后,在文件里粘贴:

R_MAX_VSIZE=100Gb

保存并重启 R,即可增加可用内存。


3. 总结

文件格式Python 可读性转换方法
h5ad✅ 直接读取-
mtx✅ 可读取 + 元信息组合可生成 h5ad
rds❌ 不能直接读取用 R + zellkonverter 转 h5ad

备注: 建议分析流程统一用 h5ad 格式