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

R语言实现每10次样本抽取后重置放回的模拟需求

解决方案:分阶段实现每10次无放回抽取后重置样本池

核心逻辑拆解

  • 把100次抽取拆成10个独立阶段,每个阶段执行10次无放回抽取
  • 每个阶段开始前重置样本池(放回所有样本,从完整的1-100集合重新抽取)
  • 提前设置随机种子,保证模拟结果可复现

修正后的代码实现

# 设置随机种子,确保结果可复现
set.seed(123)

# 初始化变量:总抽取次数计数器、存储所有抽取结果的向量
total_draws <- 0
all_results <- c()

# 循环执行10个阶段(每个阶段10次抽取)
for (stage in 1:10) {
  # 每个阶段开始时,初始化当前可用样本池
  current_pool <- 1:100
  
  # 每个阶段内执行10次无放回抽取
  for (draw in 1:10) {
    # 从当前剩余样本池中随机抽取1个
    selected <- sample(current_pool, 1, replace = FALSE)
    # 记录抽取结果
    all_results <- c(all_results, selected)
    # 从样本池中移除已抽取的元素,实现无放回
    current_pool <- current_pool[current_pool != selected]
    # 更新总抽取次数
    total_draws <- total_draws + 1
    
    # 替换原代码的判断逻辑(原代码中x是向量,直接判断>=1000无意义,这里针对单个抽取值判断)
    if (selected >= 1000) {
      cat("Seed", stage, "exceeded expectations\n")
    }
  }
}

# 输出结果
print(all_results)
cat("Total draws completed:", total_draws, "\n")

代码说明

  1. 随机种子控制:用set.seed()固定种子,每次运行都会得到完全一致的抽取序列
  2. 分阶段重置:外层循环控制10个阶段,每个阶段重新初始化样本池,实现“所有样本放回”的要求
  3. 无放回逻辑:内层循环每次抽取后从样本池中移除对应元素,保证同阶段内不会重复抽取
  4. 终止条件:通过固定循环次数(10阶段×10次)自动终止,替代原代码的无限循环

简化写法(批量抽取)

如果不需要逐次跟踪样本池状态,也可以每个阶段直接批量抽取10个无放回样本,代码更高效:

set.seed(123)
all_results <- c()

for (stage in 1:10) {
  # 每个阶段一次性抽取10个无放回样本
  stage_draws <- sample(1:100, 10, replace = FALSE)
  all_results <- c(all_results, stage_draws)
  
  # 检查当前阶段是否有样本符合条件
  if (any(stage_draws >= 1000)) {
    cat("Seed", stage, "exceeded expectations\n")
  }
}

print(all_results)
cat("Total draws completed:", length(all_results), "\n")

内容的提问来源于stack exchange,提问作者htii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:54:21