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

R语言prob包subset向量筛选结果差异及异常原因咨询

问题原因解析

核心问题是你混淆了R中==和%in%运算符的作用,同时触发了R的向量循环匹配规则:

  • R中用==比较两个长度不等的向量时,会自动把短向量重复循环到和长向量长度一致后逐位比较,并非你预期的「判断左侧元素是否属于右侧的向量集合」。

你用rolldie(1, makespace=TRUE)生成的样本空间S共6行,X1列的值依次为1,2,3,4,5,6,每行对应概率均为1/6,我们基于这个基础逐组解释你的测试结果:

子集A/重复测试的E(X1 == c(2,4,6))

右侧向量长度为3,会循环2次变成c(2,4,6,2,4,6),和X1逐位比较:
12?否 | 24?否 | 36?否 | 42?否 |54?否 |66?是
仅最后1行符合条件,子集概率为1/6≈0.1666667,和运行结果一致。

子集C(X1 == c(2,4))

右侧向量长度为2,循环3次变成c(2,4,2,4,2,4),和X1逐位比较:
12?否 |24?否 |32?否 |44?是 |52?否 |64?否
仅X1=4的行符合条件,子集概率为1/6≈0.1666667,和运行结果一致。

子集D(X1 == c(1,2))

右侧向量循环3次变成c(1,2,1,2,1,2),和X1逐位比较:
11?是 |22?是 |31?否 |42?否 |51?否 |62?否
共2行符合条件,子集概率为2/6≈0.3333333,和运行结果一致。

子集B(X1 == c(3,6))

右侧向量循环3次变成c(3,6,3,6,3,6),和X1逐位比较:
13?否 |26?否 |33?是 |46?否 |53?否 |66?是
共2行符合条件,子集概率为2/6≈0.3333333,和运行结果一致。

子集E(X1 == c(4,5,6))

右侧向量循环2次变成c(4,5,6,4,5,6),和X1逐位比较:
14?否 |25?否 |36?否 |44?是 |55?是 |66?是
共3行符合条件,子集概率为3/6=0.5,和运行结果一致。

正确实现方式

如果要筛选X1属于指定集合的行,需要用%in%运算符替换==,比如筛选偶数点数的正确代码为:

A = subset(S, X1 %in% c(2,4,6))
Prob(A) # 输出为0.5,符合你的预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:54:04