按基因reads计数筛选Seurat对象时出现FetchData错误如何解决?
错误原因
Seurat的subset()函数采用非标准评估逻辑,在循环中直接传入循环变量p或as.name(p)时,无法将p解析为其指代的基因名字符串,会直接搜索名为p的特征,因此触发变量不存在的报错。
同时建议提前校验基因名是否存在,避免拼写错误导致同类报错:
# 校验所有基因是否存在于Seurat对象的特征列表中 all(pro_genes_list %in% rownames(dNSC_cells))
可行解决方案
方案1:直接通过表达矩阵筛选(更简便,推荐)
不需要调用subset函数,直接从count矩阵中提取逻辑向量筛选符合条件的细胞名:
pro_genes_list <- c("Bcl2", "Bid") for (p in pro_genes_list) { # 提取当前基因的count向量 gene_count_vec <- GetAssayData(dNSC_cells, slot = 'counts')[p,] # 计算中位数 median_prog <- median(gene_count_vec) # 直接筛选表达量高于中位数的细胞名 with_p <- names(gene_count_vec)[gene_count_vec > median_prog] # 此处补充后续Wilcox检验代码 }
方案2:如果需要保留subset调用逻辑
通过临时元数据存储基因表达量,结合!!sym()完成变量注入:
library(rlang) pro_genes_list <- c("Bcl2", "Bid") for (p in pro_genes_list) { # 将基因表达量存入临时元数据 tmp_meta_name <- paste0("tmp_expr_", p) dNSC_cells[[tmp_meta_name]] <- GetAssayData(dNSC_cells, slot = 'counts')[p,] median_prog <- median(dNSC_cells[[tmp_meta_name]][,1]) # 用!!sym()注入变量实现筛选 with_p <- colnames(subset(dNSC_cells, subset = !!sym(tmp_meta_name) > median_prog)) # 清理临时元数据避免冗余 dNSC_cells[[tmp_meta_name]] <- NULL # 此处补充后续Wilcox检验代码 }
内容的提问来源于stack exchange,提问作者Cora_olpe
相关产品推荐
相关产品推荐

