在进行单细胞或是空间组数据分析的时候,有的人喜欢使用 R 语言进行分析,有的同学喜欢使用 Python 进行分析,但是两个语言分析所使用的文件有所不同,R 语言通常保存的为 rds 文件,Python 通常保存的为 h5ad 文件,如果是多人合作分析的时候,往往需要将文件进行格式转换,这通常是一件较为麻烦的事情,看到过有使用 SeuratDisk 和 SeuratData 等 R 语言包进行转换的程序,但是由于本人 R 语言环境等等的问题,总是无法安装,故想了一个新的方法来进行格式转换,教程如下。

首先是将 rds 文件中的信息提取出来。

library(Seurat)
# 读取 rds 文件信息
rds_file = readRDS("rds_file.rds")
rds_file

An object of class Seurat
38153 features across 9567 samples within 2 assays
Active assay: Spatial (19082 features, 0 variable features)
1 other assay present: SCT
2 dimensional reductions calculated: pca, umap
1 image present: slice1

可以看到,我现在用的是 SCT matrix,所以可以进行读取,保存为 csv 格式,包括元数据等等

write.csv(rds_file@meta.data, 'rds_file@meta.data.csv')
write.csv(rds_file@assays$Spatial@data, 'rds_file@assays$Spatial@data.csv')
write.csv(rds_file@assays$SCT@data, 'rds_file@assays$SCT@data.csv')
write.csv(rds_file@assays$SCT@data, 'rds_file@assays$SCT@data.csv')
write.csv(rownames(rds_file),'rownames(rds_file).csv')

那么便是得到的 rds 元数据的所有数据了,接下来需要进行读取,使用 anndata 进行读取

import matplotlib.patches as mpatches
import scanpy as sc
import pandas as pd
import numpy as np
from anndata import AnnData
import torch
from scipy.sparse import csr_matrix

adata_X = pd.read_csv("rds_file@assays$Spatial@data.csv",index_col=0)
adata_X = adata_X.transpose()
adata_X = csr_matrix(adata_X)
adata_obs = pd.read_csv("rds_file.data.csv",index_col=0)
adata_var = pd.read_csv("rownames(rds_file).csv",index_col=0)
adata_var = pd.DataFrame(index = [i for i in adata_var['x']])
adata = sc.AnnData(X = adata_X, obs=adata_obs, var = adata_var)
adata.write('result.h5ad')

那么便是得到了保存了所有 rds 数据的 h5ad 文件。