slice_sample报错‘无法抽取大于总体的样本’的原因及解决咨询
解决dplyr 1.0.10中slice_sample抽样报错的问题
你遇到的问题是因为dplyr 1.0.10版本的slice_sample()行为和后续版本不一致:文档里描述的"n大于组内行数时自动截断"是dplyr 1.1.0及以上版本才支持的特性,而1.0.10版本中,当n超过组大小且replace=FALSE(默认值)时,底层调用的sample.int()会直接报错——因为不放回抽样的样本量不能大于总体数量。
要实现你的需求(每组最多抽1000行,不足则全取,不放回),有两种方案:
方案1:升级dplyr版本
直接把dplyr升级到1.1.0或更高版本,你的原代码就能正常运行,新版本已经修复了这个行为,完全符合文档描述的自动截断逻辑。
方案2:手动动态设置抽样数量(无需升级)
如果无法升级版本,通过min(1000, n())动态计算每个组的抽样上限,确保不会超过组内总行数:
sample_cells <- as.data.frame(all_cells) %>% group_by(V2) %>% slice_sample(n = min(1000, n())) %>% ungroup() # 若后续不需要分组操作,建议取消分组
这里n()会返回当前组的行数,min(1000, n())保证每个组最多抽取1000行,行数不足时直接取全部,完美避开样本量大于总体的报错。
内容的提问来源于stack exchange,提问作者Alos
相关产品推荐
相关产品推荐

