前面在百万细胞舍我其谁(一晚上解决战斗) ,我们得到了张泽民老师的2024的文章:《Spatiotemporal single-cell analysis decodes cellular dynamics underlying different responses to immunotherapy in colorectal cancer》的百万单细胞数据集的第一层次降维聚类分群,并且保存完了r对象文件:
7.3G 12月 26 06:11 sce.all_int.rds
但其实完全没有必要,因为作者已经是给出来了每个单细胞的身份,我们为什么做降维聚类分群并且umap可视化,就是为了辅助我们给细胞一个身份。既然结果都给出来了,那么过程就不重要了。 接下来就应该是每个单细胞亚群进行细致的探索。仍然是写一个r脚本,内容如下所示:
library (Seurat) sce.all.int = readRDS('2-harmony/sce.all_int.rds' ) sp='human' [email protected] colnames([email protected] ) table(sce.all.int$RNA_snn_res.0.8) Sys.time() id = unique(sce.all.int$MajorCellType) lapply(id, function (x){ sce=sce.all.int[,sce.all.int$MajorCellType %in % x] sce.all=CreateSeuratObject( counts = sce@assays$RNA$counts, meta.data = [email protected] ) save(sce.all,file = paste0(x,'.sce.all.Rdata' )) Sys.time() })
假如这个脚本文件名字是(tmp.R ), 接下来就可以在shell里面提交它到后台运行:
nohup Rscript tmp.R &
这个Seurat对象本来就是接近100万个细胞,但是我进行了简单的质量控制,过滤后剩下90万左右,前面的降维聚类分群过程就省略了,参考在百万细胞舍我其谁(一晚上解决战斗) ,现在我们直接看作者的结果 :
[1] 36027 975275 [1] 36027 895488 B Epi ILC Mye Stromal T 161935 96179 48537 68250 40433 480154
可以看到,一多半是t细胞然后四分之一左右是b细胞,其它的都占比很少很少。
484M 12月 26 11:58 B.sce.all.Rdata 296M 12月 26 11:47 Epi.sce.all.Rdata 133M 12月 26 12:01 ILC.sce.all.Rdata 236M 12月 26 12:00 Mye.sce.all.Rdata 157M 12月 26 11:48 Stromal.sce.all.Rdata 1.3G 12月 26 11:55 T.sce.all.Rdata
可以看到,因为t细胞数量最多,所以导出它这个子集耗时最长:
[1] "2024-12-26 11:48:34 CST" [1] "2024-12-26 11:55:43 CST" [1] "2024-12-26 11:58:40 CST" [1] "2024-12-26 12:00:11 CST" [1] "2024-12-26 12:01:11 CST"
接下来 同样的流程降维聚类分群 在百万细胞舍我其谁(一晚上解决战斗) ,我们举例了,所有的r代码写完了,就提交到后台后等半天就ok了,全程都是代码自动化处理而已,不需要自己干啥子就可以拿到海量的结果!一切的难点,就在于不同的单细胞公共数据集的读取,只需要成为了r编程语言里面的Seurat对象,就可以全流程自动化处理~
那么,我们这个时候把前面的百万单细胞转录组数据集拆分成为了 第一层次是6个大的亚群:six major cell types: T cells, B cells, innate lymphoid cells (ILCs), myeloid cells, stromal cells, and epithelial:
每个具体的亚群,都可以是当做是一个独立的单细胞转录组项目,很简单的load进去就是一个r编程语言里面的Seurat对象,就可以全流程自动化处理~
load('../Stromal.sce.all.Rdata' ) sce.all.int$celltype =sce.all.int$SubCellType table(sce.all.int$celltype ) Sys.time()if ("SubCellType" %in % colnames([email protected] ) ){ sel.clust = "SubCellType" sce.all.int table([email protected] ) dir.create('check-by-SubCellType' ) setwd('check-by-SubCellType' ) source ('../scRNA_scripts/check-all-markers.R' ) setwd('../' ) getwd() [email protected] save(phe,file = 'phe.Rdata' ) pdf('SubCellType-vs-orig.ident.pdf' ,width = 10) gplots::balloonplot(table(sce.all.int$SubCellType ,sce.all.int$orig .ident)) dev.off() } Sys.time()
上面的r代码是需要自己保证准确无误的,然后写入到文件:step1-load-by-Seurat-v5.R
,接下来就可以nohup的在后台运行它啦~
在我们的服务器的Linux的诊断运行:nohup Rscript step1-load-by-Seurat-v5.R &
可以看到,stromal确实是非常复杂,但是张泽民课题组处理的非常好!平滑肌细胞(Smooth Muscle Cells, SMCs)和周细胞(Pericytes),这个混合的单细胞亚群可以被称为“混合间充质细胞群”(Mixed Mesenchymal Cell Cluster)或“血管相关间充质细胞群”(Vascular-Associated Mesenchymal Cell Cluster),具体命名取决于细胞的来源和所处的组织微环境。
这些知识点可以看: