创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
✨白蛇 白虎 虎 龍 福 /24k 御守り お守り 使用Seurat的v5来读取多个不是10x规范文献的单细胞名目 - 国内试镜

✨白蛇 白虎 虎 龍 福 /24k 御守り お守り 使用Seurat的v5来读取多个不是10x规范文献的单细胞名目

发布日期:2024-08-24 09:23    点击次数:178

✨白蛇 白虎 虎 龍 福 /24k 御守り お守り 使用Seurat的v5来读取多个不是10x规范文献的单细胞名目

前边咱们在 初试Seurat的V5版块 的推文内部演示了10x单细胞样品的规范3文献的读取✨白蛇 白虎 虎 龍 福 /24k 御守り お守り,况且在使用Seurat的v5来读取多个10x的单细胞转录组矩阵 的推文内部演示了多个10x单细胞样品的规范3文献的读取。

然则留住来了一个悬念, 便是若是咱们的单细胞转录组并不是10x的规范3文献,而是tsv或者csv或者txt等文本文献抒发量矩阵信息,就有点吃力了。接下来咱们以2020的著作:《Single-Cell Transcriptome Analysis Reveals Dynamic Cell Populations and Differential Gene Expression Patterns in Control and Aneurysmal Human Aortic Tissue》例如证据,它的数据集是 https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE155468

不错看到,作家这个本事给出来的是:

浆果儿全集
GSM4704931_Con4.txt.gz 9.2 MbGSM4704932_Con6.txt.gz 3.0 MbGSM4704933_Con9.txt.gz 10.0 MbGSM4704934_TAA1.txt.gz 7.7 MbGSM4704935_TAA2.txt.gz 5.8 MbGSM4704936_TAA3.txt.gz 7.2 MbGSM4704937_TAA4.txt.gz 12.5 MbGSM4704938_TAA5.txt.gz 11.7 MbGSM4704939_TAA6.txt.gz 8.1 MbGSM4704940_TAA7.txt.gz 18.7 MbGSM4704941_TAA8.txt.gz 6.4 Mb

是11个单细胞转录组样品,8 patients with ATAA (4 women and 4 men) and 3 controls (2 women and 1 man). 每个样品都是一个寂寥的txt文本文献赋存着其抒发量矩阵信息。

值得肃穆的是这个2020的数据集还被2023的著作援用了,感趣味的不错去望望,Genome-wide association study of thoracic aortic aneurysm and dissection in the Million Veteran Program. Nat Genet 2023 Jul;55(7):1106-1115. PMID: 37308786

前边提到了,若是是莫得样品的txt寂寥读取后,再merge的本事成为的Seurat对象内部的各个样品的抒发量矩阵的分开的,就会导致统统的后头的门径都失败。而它每个样品并不是10x单细胞样品的规范3文献,是以没目的使用前边的计谋。

第一种花式是把每个样品的矩阵对都

每个样品的txt仍然是寂寥的读取✨白蛇 白虎 虎 龍 福 /24k 御守り お守り,代码如下所示:

dir='GSE155468_RAW/' samples=list.files( dir ,pattern = 'gz')samples library(data.table)ctList = lapply(samples,function(pro){   # pro=samples[1]   print(pro)  ct=fread(file.path( dir ,pro),data.table = F)  ct[1:4,1:4]  rownames(ct)=ct[,1]  colnames(ct) = paste(gsub('.txt.gz','',pro),                       colnames(ct) ,sep = '_')  ct=ct[,-1]   return(ct)})

上头的代码复返了 ctList 这个list,它内部有每个单细胞样品的抒发量矩阵,然则每个样品的基因数目和细胞数目都是不一样的哦。然后提前把矩阵统一之前需要最初把基因数目对都,统一后才构建对象:

lapply(ctList, dim)tmp =table(unlist(lapply(ctList, rownames)))cg = names(tmp)[tmp==length(samples)]bigct = do.call(cbind,                lapply(ctList,function(ct){                   ct = ct[cg,]                   return(ct)                }))sce.all=CreateSeuratObject(counts =  bigct,                        min.cells = 5,                       min.features = 300)sce.allas.data.frame(sce.all@assays$RNA$counts[1:10, 1:2])head(sce.all@meta.data, 10)table(sce.all@meta.data$orig.ident) 

不错看到,我这个本事作念了一个处置,便是每个样品的基因数目都对都了,若是某个基因在某个样品内部私有其实它不会被筹商,因为我筹商的是绝大部分基因。

因为多个样品统一成为了一个超等大的抒发量矩阵,便是 bigct 这个变量,是以后头径直针对它来使用CreateSeuratObject函数去构建Seurat对象,便是完满的卑鄙分析的输入数据啦。

第二种花式是把矩阵复原成为10x的3文献

前边咱们指出来了,它每个样品并不是10x单细胞样品的规范3文献,每个样品都是一个寂寥的txt文本文献赋存着其抒发量矩阵信息,是以没目的使用前边的计谋。然则,咱们其实不错把柄这个txt文献去把它复原成为10x的3文献,早在2020-03-16其实我就写个一个浮松的札记:抒发矩阵逆转为10X的规范输出3个文献,然则阿谁本事的代码略略有点吃力,咱们其实不错把它写成一个函数,接下来让咱们演示一下吧。

每个样品的txt仍然是寂寥的读取,代码如下所示:

dir='GSE155468_RAW/' samples=list.files( dir ,pattern = 'gz')samples library(data.table)ctList = lapply(samples,function(pro){   # pro=samples[1]   print(pro)  ct=fread(file.path( dir ,pro),data.table = F)  ct[1:4,1:4]  rownames(ct)=ct[,1]  colnames(ct) = paste(gsub('.txt.gz','',pro),                       colnames(ct) ,sep = '_')  ct=ct[,-1]   return(ct)})

上头的代码复返了 ctList 这个list,它内部有每个单细胞样品的抒发量矩阵,然则每个样品的基因数目和细胞数目都是不一样的哦。接下来咱们构造一个自界说函数,把抒发量矩阵转为10x的3个文献,如下所示:

to10x <- function(ct)  {  write.table(data.frame(rownames(ct),rownames(ct)),file = 'features.tsv',              quote = F,sep = '\t',              col.names = F,row.names = F)  write.table(colnames(ct),file = 'barcodes.tsv',quote = F,              col.names = F,row.names = F)  file="matrix.mtx"  sink(file)  cat("%%MatrixMarket matrix coordinate integer general\n")  cat("%\n")  cat(paste(nrow(ct),ncol(ct),sum(ct>0),"\n"))   sink()  tmp=ct[1:5,1:4]  tmp  tmp=do.call(rbind,lapply(1:ncol(ct),function(i){    return(data.frame(row=1:nrow(ct),                      col=i,                      exp=ct[,i]))  }) )  tmp=tmp[tmp$exp>0,]  head(tmp)  write.table(tmp,file = 'matrix.mtx',quote = F,              col.names = F,row.names = F,append = T )}

比拟浮松,接下来就针对前边的抒发量列表去轮回使用这个函数即可,如下所示:

 lapply(samples,function(pro){   # pro=samples[1]   pro=gsub('.txt.gz','',pro)  print(pro)  ct = ctList[[1]]  dir.create(pro)  setwd(pro)  to10x(ct)  setwd('../')  })

说真话,函数驱动后果如实有点低,不外不遑急,反恰是锻练的代码,咱们有时是也曾会继承前边的矩阵统一的面孔,并不需要把抒发量矩阵转为10x的3个文献。收效后不错看到如下所示的文献夹结构:

│   ├── [ 160]  GSM4704935_TAA2│   │   ├── [115K]  barcodes.tsv│   │   ├── [291K]  features.tsv│   │   └── [ 95M]  matrix.mtx│   ├── [ 160]  GSM4704936_TAA3│   │   ├── [115K]  barcodes.tsv│   │   ├── [291K]  features.tsv│   │   └── [ 95M]  matrix.mtx

值得肃穆的是每个样品这个本事内部的3文献其实是并莫得压缩,是以很消耗空间哦。况且因为这个本事我给出来的名字是features.tsv是以若是思使用Seurat的Read10X读取,就需要把每个样品文献夹内部的3文献gz压缩一下哦!然后把每个样品的文献夹归纳整理到 outputs 文献夹内部,就不错使用如下所示的代码啦。

library(Seurat)tmp = list.dirs('outputs')[-1]tmpct = Read10X(tmp) sce.all=CreateSeuratObject(counts = ct  ,                            min.cells = 5,                           min.features = 300,) 

如下所示的文献夹架构哦:

图片

文献夹架构

相似的✨白蛇 白虎 虎 龍 福 /24k 御守り お守り,只需有了sce.all对象,后头的降维聚类分群便是咱们之前的代码即可啦。未来中午直播一下这个一起的经由哈!

本站仅提供存储就业,统统本色均由用户发布,如发现存害或侵权本色,请点击举报。

创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
JzEngine Create File False