一、理論
①barcodes.tsv.gz,、features.tsv.gz,、matrix.mtx.gz三個(gè)文件的內(nèi)容以及正常的格式:1)我們打開(kāi)barcodes.tsv.gz,一般只有一列,,可以看到是由“16個(gè)字母-1”組成的一串字符,,在測(cè)序的時(shí)候每個(gè)細(xì)胞和凝膠珠以及水相和油構(gòu)成了單細(xì)胞乳液微滴(GEM),而每個(gè)凝膠珠上都有唯一的Barcode片段,,由此來(lái)區(qū)分不同的細(xì)胞,。
2)我們打開(kāi)features.tsv.gz,可以看到基因唯一的基因名,?!癊NSMUSG + 11位數(shù)字”是Ensembl 數(shù)據(jù)庫(kù)分配的小鼠基因ID,而“Gm + 數(shù)字”是小鼠的基因名稱(chēng),。
3)我們打開(kāi)matrix.mtx.gz可以看到每個(gè)基因的表達(dá)量的原始值,。如果在R里面讀入matrix可以看到是稀疏矩陣(一般是為了減少文件大?。D(zhuǎn)化為dense matrix或者直接打開(kāi)可以看到cellranger的版本,,以及對(duì)應(yīng)一共有的基因數(shù)(55357行),、細(xì)胞數(shù)(8229列)和非零值(20154188)。而下方的數(shù)字例如第一個(gè)代表:第165行和第一列的值為2,。導(dǎo)入是將單細(xì)胞RNA測(cè)序(scRNA-seq)下機(jī)數(shù)據(jù)經(jīng)過(guò) Cell Ranger 流程處理后,,將結(jié)果文件加載到 R 環(huán)境中,,以便進(jìn)行后續(xù)的數(shù)據(jù)分析和可視化,。Cell Ranger 是 10X Genomics 提供的標(biāo)準(zhǔn)分析流程,其輸出文件通常包括:
②相關(guān)R包工作原理
1)Read10X:目的就是讀入10X的cellranger后的三個(gè)文件,,形成count矩陣,。
Read10X(
data.dir,
gene.column = 2,
cell.column = 1,
unique.features = TRUE,
strip.suffix = FALSE
)
data.dir就是上述三個(gè)文件的路徑;
“gene.column = 2”就是會(huì)對(duì)應(yīng)feature文件的第二列作為基因名字,;
“cell.column = 1”會(huì)對(duì)應(yīng)barcode文件的第一列為細(xì)胞名字,;
“unique.features = TRUE”是使基因名唯一,如果有重復(fù)的會(huì)自動(dòng)添加后綴以區(qū)分,,
“strip.suffix = FALSE” 是否移除barcodes中的“-1”后綴,。
當(dāng)整理好對(duì)應(yīng)文件為上述三個(gè)文件的gz壓縮格式時(shí),只用給對(duì)應(yīng)的data.dir就可,。
2)CreateSeuratObject:目的就是最終在R中形成Seruat對(duì)象
CreateSeuratObject(
counts,
assay = "RNA",
names.field = 1,
names.delim = "_",
meta.data = NULL,
project = "CreateSeuratObject",
min.cells = 0,
min.features = 0
)
counts:矩陣就是Read10X得到的數(shù)據(jù),;
assay:指定初始的 assay 名稱(chēng),默認(rèn)為 "RNA"
meta.data:這個(gè)指額外的細(xì)胞元數(shù)據(jù),,通常是一個(gè)數(shù)據(jù)框,,注意元數(shù)據(jù)的行名需要與 counts 矩陣的列名(細(xì)胞名稱(chēng))匹配。
min.cells:僅保留在至少在多少個(gè)細(xì)胞中表達(dá)的基因,。
例如min.cells = 3會(huì)過(guò)濾掉在少于3個(gè)細(xì)胞中表達(dá)的基因,。
min.features:僅保留檢測(cè)到至少多少個(gè)基因的細(xì)胞。
例如min.features = 200會(huì)過(guò)濾掉檢測(cè)到少于200個(gè)基因的細(xì)胞,。
③其他讀入方式
如果上述文件格式不標(biāo)準(zhǔn)可以對(duì)應(yīng)去修改,,對(duì)于txt/csv/tsv 文件、HDF5文件的讀入未來(lái)我們將會(huì)繼續(xù)分享,。
二,、實(shí)踐
數(shù)據(jù)來(lái)源:
我們接下來(lái)要使用的所有單細(xì)胞轉(zhuǎn)錄組分析均用以下自行構(gòu)建的示例數(shù)據(jù):
鏈接: https://pan.baidu.com/s/1q3dQXmmFmaOeTLLJ_Gjm6Q 提取碼: 8yhh
可以看到一共有17個(gè)樣本(4個(gè)case和13個(gè)control),已經(jīng)整理好對(duì)應(yīng)樣本的filtered_feature_bc_matrix,。里面均整理好了三個(gè)文件,。
①R包環(huán)境
library(Seurat)
library(tidyverse)
②文件位置
# 設(shè)置基礎(chǔ)路徑
base_path <- " ../outputs"
# 獲取所有子文件夾
folders <- list.dirs(base_path, full.names = FALSE, recursive = FALSE)
③讀入數(shù)據(jù)
# 創(chuàng)建一個(gè)列表來(lái)存儲(chǔ)所有的Seurat對(duì)象seurat_list <- list()
# 循環(huán)讀取每個(gè)文件夾
for(folder in folders) {
# 構(gòu)建完整的路徑
full_path <- file.path(base_path, folder, "filtered_feature_bc_matrix")
# 使用文件夾名稱(chēng)作為樣本名
sample_name <- folder
# 讀取數(shù)據(jù)并創(chuàng)建Seurat對(duì)象
tryCatch({
data <- Read10X(data.dir = full_path)
seurat_obj <- CreateSeuratObject(counts = data, project = sample_name, min.cells = 3, min.features = 200)
# 將對(duì)象存儲(chǔ)在列表中
seurat_list[[sample_name]] <- seurat_obj
# 打印進(jìn)度信息
cat(sprintf("Successfully processed %s\n", folder))
}, error = function(e) {
cat(sprintf("Error processing %s: %s\n", folder, e$message))
})
}
最終我們可以看到17個(gè)樣本已經(jīng)成功讀入R中了!