You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:10:32