如何使用scRepertoire包合并不同组的filtered_contigs
合并两组VDJ过滤数据并简化重复分析流程
我需要合并来自两个不同组的已过滤CSV文件,此前分别处理每组数据导致后续分析存在大量重复工作,以下是原实现代码,求优化方案:
library(scRepertoire) library(Seurat) library(readr) AA <- read.csv("/Users/Wawa/Desktop/VDJ/AA_filteredContigs.csv.gz") HH <- read.csv("/Users/Wawa/Desktop/VDJ/HH_filteredContigs.csv.gz") contig_list <- list(AA, HH) combined_TCR_AA <- combineTCR(AA, samples = c("AA"), cells = "T-AB") combined_TCR_HH <- combineTCR(HH, samples = c("HH"), cells = "T-AB") combined_TCR_AA <- addVariable(combined_TCR_AA, name = "group", variables = c("AA")) combined_TCR_HH <- addVariable(combined_TCR_HH, name = "group", variables = c("HH")) names(combined_TCR_AA) = c("AA") names(combined_TCR_HH) = c("HH") str(combined_TCR_AA) str(combined_TCR_HH) Top10_clone_AA = lapply(combined_TCR_AA, function(x){ head(sort(table(x$CTaa), decreasing = T),10) / nrow(x)}) Top10_clone_stat_AA = do.call(cbind, Top10_clone_AA) rownames(Top10_clone_stat_AA) = 1:10 Top10_clone_stat_AA=reshape2::melt(Top10_clone_stat_AA) colnames(Top10_clone_stat_AA) = c("ID","sample","Freq") Top10_clone_stat_AA$group = substr(Top10_clone_stat_AA$sample,1,2) head(Top10_clone_stat_AA) Top10_clone_HH = lapply(combined_TCR_HH, function(x){ head(sort(table(x$CTaa), decreasing = T),10) / nrow(x)}) Top10_clone_stat_HH = do.call(cbind, Top10_clone_HH) rownames(Top10_clone_stat_HH) = 1:10 Top10_clone_stat_HH=reshape2::melt(Top10_clone_stat_HH) colnames(Top10_clone_stat_HH) = c("ID","sample","Freq") Top10_clone_stat_HH$group = substr(Top10_clone_stat_HH$sample,1,2) head(Top10_clone_stat_HH)
优化后的代码
library(scRepertoire) library(Seurat) library(readr) library(reshape2) # 批量读取两组过滤文件 sample_paths <- c( "/Users/Wawa/Desktop/VDJ/AA_filteredContigs.csv.gz", "/Users/Wawa/Desktop/VDJ/HH_filteredContigs.csv.gz" ) sample_names <- c("AA", "HH") contig_list <- lapply(sample_paths, read.csv) names(contig_list) <- sample_names # 一次性合并两组TCR数据并添加分组变量 combined_TCR <- combineTCR(contig_list, samples = sample_names, cells = "T-AB") combined_TCR <- addVariable(combined_TCR, name = "group", variables = sample_names) # 统一计算两组Top10克隆频率 Top10_clone <- lapply(combined_TCR, function(x){ head(sort(table(x$CTaa), decreasing = T), 10) / nrow(x) }) Top10_clone_stat <- do.call(cbind, Top10_clone) rownames(Top10_clone_stat) <- 1:10 Top10_clone_stat <- melt(Top10_clone_stat) colnames(Top10_clone_stat) <- c("ID", "sample", "Freq") Top10_clone_stat$group <- substr(Top10_clone_stat$sample, 1, 2) # 查看合并后的结果 head(Top10_clone_stat)
优化说明
- 批量处理减少重复:用列表批量读取文件,直接传入
combineTCR一次性完成两组数据的合并,避免重复调用函数 - 统一添加分组信息:一次调用
addVariable即可为所有样本绑定分组变量,无需分别处理 - 复用分析逻辑:仅编写一次Top10克隆频率计算代码,通过
lapply遍历合并后的列表自动处理两组数据 - 精简变量存储:不再单独存储分组专属的中间对象,减少内存占用与代码冗余
内容的提问来源于stack exchange,提问作者Equal
相关产品推荐
相关产品推荐

