在R语言中计算双骰子点数和≥5的累计概率求助
R语言计算两骰子点数和≥5的累计概率解法
你不需要遍历表格,用R的向量化特性就能轻松搞定,给你两种简单的实现方式:
方法一:直接基于原始结果计算
直接对xy向量统计满足条件的次数占总次数的比例,代码如下:
numrolls = 10000 x = sample(1:6, numrolls, replace=TRUE) y = sample(1:6, numrolls, replace=TRUE) xy = x + y # 直接计算累计概率 total_prob = sum(xy >= 5) / numrolls total_prob
解释:xy >= 5会生成一个长度为10000的逻辑向量(满足条件为TRUE,否则FALSE),sum()会自动把TRUE转为1、FALSE转为0,求和就是满足条件的投掷次数,除以总次数就是累计概率。
方法二:基于概率表累加
如果你想用已经生成的prob概率表计算,只需要筛选出点数和≥5的概率项再求和:
numrolls = 10000 x = sample(1:6, numrolls, replace=TRUE) y = sample(1:6, numrolls, replace=TRUE) xy = x + y prob = table(xy) / numrolls # 筛选点数和≥5的概率并求和 total_prob = sum(prob[as.numeric(names(prob)) >= 5]) total_prob
解释:names(prob)是点数和的字符型标签,转成数值型后筛选出≥5的项,再用sum()累加对应的概率值。
你原来的if(xy >=5)写法有问题,因为xy是长度10000的向量,if只能处理长度为1的条件,R里这种批量判断不需要用循环或遍历,向量化操作更高效简洁。
内容的提问来源于stack exchange,提问作者Pascal Lange
相关产品推荐
相关产品推荐

