在R的data.tree包中获取叶子节点至根节点的父节点并生成子树
获取叶子节点到根节点的完整路径子树
针对你的需求,不用重复调用$parent,可以利用data.tree包自带的路径和祖先节点相关函数来实现,代码更简洁且可扩展:
# 加载数据并定义目标节点名称 data(acme) name <- "New Labs" # 1. 找到目标叶子节点 target_node <- FindNode(acme, name) # 2. 获取从根节点到目标节点的完整路径节点列表 path_nodes <- target_node$Path() # 3. 克隆原树并修剪,只保留路径上的节点 subtree <- Clone(acme) Prune(subtree, function(node) node %in% path_nodes) # 打印结果 print(subtree)
执行后你会得到期望的子树:
Acme Inc. 2 °--Research 3 °--New Labs 4
补充说明:
Path()函数会返回从根节点到当前节点的所有节点组成的列表,完美覆盖你需要的"叶子到根的所有父节点(含自身和根)"的需求。- 如果想直接获取从目标节点到根的反向路径,可以用
GetAncestors(include.self = TRUE),它返回的列表是从目标节点开始往上到根的顺序,后续修剪逻辑是一样的:
ancestors <- target_node$GetAncestors(include.self = TRUE) subtree <- Clone(acme) Prune(subtree, function(node) node %in% ancestors)
这种方法的优势在于不管目标节点在树的第几层,都能自动适配,不用手动计算需要调用几次$parent,扩展性更强。
内容的提问来源于stack exchange,提问作者Manish Pathak
相关产品推荐
相关产品推荐

