【发布时间】:2014-06-10 01:37:05
【问题描述】:
我有一个树结构,其中包含唯一标识的节点、一个根和一堆分支。任何节点可以发芽的分支数量或分支深度都没有限制。
我想做的是,给定一个节点的 id,有效地返回该节点的所有父节点的 id,以及每个父节点的所有兄弟姐妹的 id。我希望这个特定问题的答案将使用为这种类型的操作设计的包/函数,以便我可以了解它们并将它们用于未来的类似问题,而不是每次都必须编写自定义算法。
这是子父形式的树:
structure(list(child = 1:20, parent = c(NA, 1L, 2L, 3L, 1L, 5L, 6L, 5L, 8L, 1L, 1L, 11L, 12L, 11L, 14L, 14L, 1L, 17L, 18L, 19L)), .Names = c("child", "parent"), class = "data.frame", row.names = c(NA, -20L))
这是一个视觉表示:
对于特定问题,我的目标 id 是 13(红色),并且想获取父节点的 id(橙色)以及父节点的兄弟姐妹的 id(黄色)。我绝对可以想出一个算法来做到这一点(获取所有父母很容易,然后兄弟姐妹意味着获取每个父母的父母的孩子),但我真的希望已经存在一个框架可以有效地完成这一切。
我简要地研究了rpart、tree 和 ape,但据我的简短回顾可以看出,它们的目标是树的统计分类,而不是节点的操作/检索,它似乎我基于一个有点敷衍的评论,他们不提供我所追求的功能(很可能我只是错过了它/误解了它)。
另一个选项似乎是 XML 或 xmlTree,这将允许我使用一些 DOM 操作工具来实现我的目标,但它似乎有点笨拙,可能不是最佳选择。
【问题讨论】:
-
我想你想要 'igraph' 包。
-
@BondedDust,是的,谢谢,这就是我想要的,虽然需要一些工作。