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

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

1
2
3
4
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 格式,包括元数据等等

1
2
3
4
5
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 进行读取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 文件。