R语言如何从数据集抽取多个不同大小的有放回随机样本
错误原因
dplyr::rep_sample_n函数的size参数仅支持传入单个整数值,无法直接传入多组样本量的向量,是直接报错的核心原因- 原代码中
candidate_wells对象未定义,且抽样逻辑与后续lapply调用重复冲突,逻辑不通顺
可行实现方案
方案1:基础R实现(无需额外依赖)
# 示例数据集,替换为你实际的10000行数据集即可 dataset <- data.frame(ID = c("model0001", "model0002", "model0003", "model0004", "model0005", "model0006", "model0007", "model0008", "model0009", "model0010"), IL_NA = 1:10, PROD = 11:20, INJ = 21:30) # 样本量定义,实际使用时替换为 seq(194,236,by=14) 即可 sizes <- seq(1,8,by=2) # 生成不同样本量的有放回抽样结果,返回列表,每个元素对应一个样本量的抽样表 sample_set <- lapply(sizes, function(n) { dataset[sample(nrow(dataset), size = n, replace = TRUE), ] }) # 可选:给列表元素命名,方便后续直接按样本量调用 names(sample_set) <- paste0("size_", sizes)
调用示例:获取样本量为3的抽样结果,直接使用sample_set$size_3即可。
方案2:tidyverse风格实现
如果你习惯使用dplyr系列工具,可以用slice_sample+purrr::map实现:
library(dplyr) library(purrr) # 数据集同上 dataset <- data.frame(ID = c("model0001", "model0002", "model0003", "model0004", "model0005", "model0006", "model0007", "model0008", "model0009", "model0010"), IL_NA = 1:10, PROD = 11:20, INJ = 21:30) sizes <- seq(1,8,by=2) sample_set <- map(sizes, ~ slice_sample(dataset, n = .x, replace = TRUE)) names(sample_set) <- paste0("size_", sizes)
扩展:每个样本量多次重复抽样
如果需要每个样本量重复多次抽样(比如每个样本量抽5次重复实验),可以加一层嵌套:
# 每个样本量重复抽样3次 rep_num <- 3 sample_set_multi <- lapply(sizes, function(n) { lapply(1:rep_num, function(r) { dataset[sample(nrow(dataset), size = n, replace = TRUE), ] }) }) names(sample_set_multi) <- paste0("size_", sizes)
内容的提问来源于stack exchange,提问作者Sharon Soler
相关产品推荐
相关产品推荐

