使用APE包drop.tip后进化树导出出现:0,如何彻底删除末端分支?
用APE包drop.tip彻底删除进化树末端分支的解决方案
先改最明显的错误:导出的是原树
你代码里写的write.tree(L9_CRESS, ...)是把没处理过的原始树导出了,根本没用到你用drop.tip生成的dropped_tip_b9。先把这行改成:
write.tree(dropped_tip_b9, file = "L9_CRESS_V2.nwk", append = FALSE, digits = 5, tree.names = FALSE)
针对分支长度0的重复末端:调整drop.tip参数
你的待删除末端是分支长度为0的重复项,默认参数没法彻底清掉空分支,调整两个参数就能解决:
- 把
collapse.singles = TRUE:删除末端后留下的单节点空分支(就是那些显示:0的部分)会被直接合并 - 保持
trim.internal = TRUE:这个参数会删掉末端对应的内部分支,配合上面的参数刚好处理分支长度0的情况
修改后的drop.tip代码:
dropped_tip_b9 <- drop.tip(L9_CRESS, tip= c(232,260,261), trim.internal = TRUE, subtree = FALSE, root.edge = 0, rooted = is.rooted(L9_CRESS), collapse.singles = TRUE, interactive = FALSE)
补充:
subtree = FALSE是默认值,更适合常规删除末端的场景;root.edge = 0是避免不必要的根边缘调整,如果你不需要保留根边缘的话可以这么设。
验证处理结果
改完后可以用这两行代码确认树的结构是否符合预期:
# 查看处理后的末端数量,确认目标末端已删除 length(dropped_tip_b9$tip.label) # 检查是否还有分支长度为0的情况 any(dropped_tip_b9$edge.length == 0)
内容的提问来源于stack exchange,提问作者Diego Olivo
相关产品推荐
相关产品推荐

