Seurat对象按条件、细胞类型分层随机抽样实现方案咨询
Seurat对象双分组分层抽样实现方案
核心实现逻辑
不需要手动拆分分组,仅通过对Seurat元数据做分组抽样得到待保留细胞ID,直接子集化原对象即可完成操作,天然兼容「组内细胞数≥1000抽1000,不足则保留全部」的需求,无需额外错误捕获。
操作步骤
- 加载依赖包
用到Seurat和dplyr两个包,代码如下:library(Seurat) library(dplyr) - 生成待保留的细胞ID列表
直接对Seurat的元数据按condition和细胞类型列分组,抽样时取组内细胞数和1000的较小值作为抽样量:# 可选:设置随机种子保证抽样结果可复现 set.seed(123) # 替换代码中的cell_type为你实际的细胞类型元数据列名 keep_cells <- seurat_obj@meta.data %>% group_by(condition, cell_type) %>% slice_sample(n = min(n(), 1000)) %>% rownames() - 子集化原Seurat对象得到抽样后的结果
seurat_sampled <- seurat_obj[, keep_cells]
原方案报错原因说明
此前手动拆分分组后抽样报错,是因为抽样函数的size参数传入了大于组内实际细胞数的数值,本方案用min(n(), 1000)直接适配了组内细胞数不足的边界场景,无需额外调用tryCatch做错误处理。
内容的提问来源于stack exchange,提问作者bari
相关产品推荐
相关产品推荐

