如何将 ctree 节点变成向量?
Posted
技术标签:
【中文标题】如何将 ctree 节点变成向量?【英文标题】:How to turn ctree nodes into a vector? 【发布时间】:2019-05-16 14:02:38 【问题描述】:我将使用 iris 表的示例来解释我的问题。假设我想在萼片宽度和物种之间创建一棵树。为此,我将使用以下代码:
ctree(Species~Sepal.Width,data=iris)->a
plot(a,type="simple")
问题是,如果我想做一个数据框,例如计算每个节点中的案例数量(从 0 到 2.9;2.9 到 3.3 等),我发现这样做的唯一方法是通过手动创建一个新向量,然后使用dcast
或table
函数。
这个解决方案的问题是,如果我有一个更大的树结果,它可能会非常困难。你知道任何其他解决方案吗?非常感谢。
【问题讨论】:
【参考方案1】:实际上,ctree
创建的派对结构中存储了该信息。使用您的示例,a[1]$fitted[,1]
具有每个点最终位于哪个叶子。因此您可以通过以下方式获得每个叶子的点数:
table(a[1]$fitted[,1])
3 4 5
57 56 37
如果您想查看与叶子编号相关的规则,您可以使用:
partykit:::.list.rules.party(a)
3
"Sepal.Width <= 3.3 & Sepal.Width <= 2.9"
4
"Sepal.Width <= 3.3 & Sepal.Width > 2.9"
5
"Sepal.Width > 3.3"
【讨论】:
您好,如果我执行 a[1]$fitted[,1],我会收到此错误:a[1] 中的错误:'S4' 类型的对象不是子集。你知道我该如何解决吗? 当我执行上面的代码,然后执行我的代码时,我没有收到任何错误。当我运行class(a)
我得到[1] "constparty" "party"
你得到什么?
我得到 [1] "BinaryTree" attr(,"package") [1] "party以上是关于如何将 ctree 节点变成向量?的主要内容,如果未能解决你的问题,请参考以下文章