如何在R中模拟掷骰子计算出现4后接6的平均投掷次数
R掷骰子游戏模拟的高效实现方案
核心逻辑说明
R没有内置do until语法,但可以通过repeat + break的组合实现完全等效的终止式循环逻辑,模拟过程不需要预先生成大量随机数,也无需导出到Excel手动统计,代码运行后可直接输出平均投掷次数。
完整实现代码
首先定义单轮试验的模拟函数:
# 单轮试验:掷骰子直到出现4后接6,返回总投掷次数 simulate_one_trial <- function() { prev_roll <- NA count <- 0 repeat { current_roll <- sample(1:6, size = 1, replace = TRUE) # 直接模拟掷1个6面骰子 count <- count + 1 # 判断是否满足终止条件:前一次是4,当前是6 if (!is.na(prev_roll) && prev_roll == 4 && current_roll == 6) { break } prev_roll <- current_roll } return(count) }
然后重复试验100次计算平均值:
# 重复100次试验 trial_results <- replicate(100, simulate_one_trial()) # 计算平均投掷次数 avg_count <- mean(trial_results) print(avg_count)
代码说明
- 用
sample(1:6,1)模拟掷骰子比floor(runif())更准确,不需要手动调整区间避免边界值误差 repeat循环会持续运行直到遇到break语句,完全匹配你需要的“直到出现4后接6停止”的逻辑replicate函数自动批量执行指定次数的模拟,不需要手动定义上百个roll变量,也无需手动统计结果- 如果需要调整模拟次数,直接修改
replicate的第一个参数即可,比如要跑1000次模拟就改为replicate(1000, simulate_one_trial())
补充:该问题的理论期望投掷次数为36,模拟次数越多,计算出的平均值会越接近36。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

