如何完善R语言埃尔斯伯格悖论抽奖函数以输出选中颜色?
完善后的埃尔斯伯格悖论模拟R函数
原函数已经完成了黑球、黄球数量的随机生成,接下来只需要针对每一次模拟构建球池并随机抽取即可。以下是完善后的代码:
Ellsberg <- function(n){ # 固定红球数量为30,符合埃尔斯伯格悖论设定 r <- 30 # 生成n次模拟的黑球数量(范围0-60的整数) b <- floor(runif(n, 0, 61)) # 黄球数量 = 60 - 黑球数量,保证黑黄球总数为60 y <- 60 - b # 遍历每一次模拟,随机抽取一个球的颜色 selected_colors <- sapply(1:n, function(i){ # 构建本次模拟的球池:重复对应颜色的球 balls <- c(rep("红", r), rep("黑", b[i]), rep("黄", y[i])) # 随机抽取1个球 sample(balls, 1) }) # 返回结构化结果:包含每次的球数和选中颜色 data.frame( 黑球数量 = b, 黄球数量 = y, 选中颜色 = selected_colors ) }
代码说明
- 保留原逻辑:红球固定30个,黑球数量随机生成0到60的整数,黄球数量随黑球数量自动计算,保证总球数为90。
- 构建球池:对每一次模拟,用
rep函数生成对应数量的红、黑、黄球组成的向量。 - 随机抽取:用
sample函数从球池中随机选取1个球,得到选中的颜色。 - 返回结果:以数据框形式输出,清晰展示每一次模拟的参数和结果,便于后续统计分析。
使用示例
运行Ellsberg(5)会得到类似如下的输出:
黑球数量 黄球数量 选中颜色 1 18 42 黄 2 55 5 黑 3 29 31 红 4 3 57 黄 5 40 20 黑
内容的提问来源于stack exchange,提问作者DavidCHughes
相关产品推荐
相关产品推荐

