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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:35:10