r - Arules 中规则的并集和交集在算术上是有意义的
问题描述
union(setA,setB)= setA + setB - intersect(setA,setB)的简单数学无效
我在这里想念什么?
这是我的两个规则集的总结。
> setA
set of 625 rules
> setB
set of 622 rules
> union(setA,setB)
set of 626 rules
> intersect(setA,setB)
set of 174 rules
> setdiff(setA,setB)
set of 451 rules
> setdiff(setB,setA)
set of 448 rules
导出的规则
模型
解决方案
这是一个棘手的问题。
load("setA.Rdata")
load("setB.Rdata")
all.equal(itemLabels(setA), itemLabels(setB))
[1] "Lengths (261, 263) differ (string compare on first 261)"
[2] "167 string mismatches"
您有两个使用不同项目编码的规则集(即项目的不同顺序)。如果您从不同的数据集中挖掘它们并且不注意项目编码相同,则会发生这种情况。
arules 期望集合以相同的方式编码而无需检查。我认为需要添加支票。
您可以通过重新编码以使用相同的 itemLabels 来修复您的规则集:
itemLabels <- union(itemLabels(setA), itemLabels(setB))
setA_fixed <- new("rules",
lhs = recode(lhs(setA), itemLabels = itemLabels),
rhs = recode(rhs(setA), itemLabels = itemLabels)
)
setB_fixed <- new("rules",
lhs = recode(lhs(setB), itemLabels = itemLabels),
rhs = recode(rhs(setB), itemLabels = itemLabels)
)
现在你得到了预期的结果:
length(union(setA_fixed, setB_fixed))
[1] 626
length(c(setA_fixed, setB_fixed)) - length(intersect(setA_fixed, setB_fixed))
[1] 626
推荐阅读
- swift - 在 Swift 中替换字符串中的特定字符
- node.js - 如何在视图 node.js 中显示视图
- qt - 如何禁用 QML 对象的可伸缩性
- ios - 如何获得 UIFont 的百分比 lineSpacing?(计算百分比值)
- mysql - Liferay 7.1.1 GA2 - 如何加密数据库内容?
- reactjs - 当我包装我的应用程序时,元素类型无效
- docker - 如何为 Dockfile 中的每个 RUN 语句管理哈希 ID?
- c# - 以 params 类型为参数的函数类型
- c# - 如何部署在其中调用 UWP OCR API 的 .net dll?
- node.js - 如何修复 TypeScript 错误属性“isBoom”在类型“Boom”上不存在
| 响应对象'