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

请求修正R语言多硬币首次正面计数错误的代码

修正R语言硬币实验的首次正面计数错误

你的计数错误核心问题是:每次迭代时错误覆盖了硬币已记录的首次正面次数——后续翻转操作不管硬币是否已经出过正面,都更新次数,导致第一次出现正面的迭代次数被后期数值覆盖。

以下是修正后的代码,关键逻辑是仅在硬币首次出现正面时记录当前迭代次数,避免后续操作覆盖:

set.seed(123) # 设置随机种子,方便复现结果
n_coins <- 10

# 初始化硬币状态:-1=未被选中,0=反面,1=正面
coin_states <- rep(-1, n_coins)
# 初始化首次正面次数向量,NA表示尚未记录
first_head <- rep(NA, n_coins)
iteration <- 0

# 循环直到所有硬币都至少出现过一次正面
while(any(coin_states != 1)) {
  iteration <- iteration + 1
  # 随机生成本次要选取的硬币数量(0到10之间的整数)
  k <- sample(0:n_coins, 1)
  
  if(k > 0) {
    # 无放回随机选取k枚硬币的索引
    selected_idx <- sample(1:n_coins, k, replace = FALSE)
    # 对选中的硬币进行翻转,生成0(反面)或1(正面)
    flipped_results <- sample(c(0, 1), k, replace = TRUE)
    
    # 更新选中硬币的状态
    coin_states[selected_idx] <- flipped_results
    
    # 仅更新那些首次出现正面的硬币的次数:之前未记录(NA)且本次翻转为1
    update_mask <- is.na(first_head[selected_idx]) & flipped_results == 1
    first_head[selected_idx[update_mask]] <- iteration
  }
}

# 输出结果
cat("各硬币首次正面所需翻转次数:\n")
print(first_head)
cat("实验总迭代次数:", iteration, "\n")

关键修正说明

  • 单独维护first_head向量,初始值为NA,仅当硬币第一次翻转为正面时,才将当前迭代次数赋值给对应位置,彻底避免后续翻转操作覆盖首次记录。
  • 通过update_mask精准筛选需要更新的硬币索引,确保只有符合条件的硬币才会被记录首次正面次数。

运行上述代码后,你会看到每个硬币的首次正面次数会正确对应其第一次出现1的迭代轮次,不会再出现后期数值覆盖前期正确记录的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:42:15