在 R 中创建切片树
Posted
技术标签:
【中文标题】在 R 中创建切片树【英文标题】:Creating a slicing tree in R 【发布时间】:2013-03-17 12:12:40 【问题描述】:有谁知道R中是否有一个包或简单的方法来创建以下形式的树结构:
我不是在寻找一种方法来创建像上面这样的好情节。我最大的问题是找到一种方法来处理这样一棵树,其中节点、叶子和子节点之间有明显的区别。例如,我希望能够通过调整字符串或向量来切换两个叶子。所以我猜这主要是一个“数据存储”问题。
我一直在寻找很长一段时间,偶然发现了一个名为“Dendrogram”的包。这个包的问题是(据我所知)它不允许标记内部节点,例如“H”和“V”。只有最后的叶子可以携带一个值或字符串。
我发现的另一个包是“rpart”,但我认为它们只对回归树有用。
如果有人知道,我将不胜感激!
【问题讨论】:
您好,我应该补充一点,由于您是新来的,您可能想阅读the about 和faq 了解 SO 的工作原理。如果当您收到解决问题的答案时,通过单击小复选标记接受它,*** 对每个人都更有价值。您绝对没有义务这样做,但如果答案确实解决了您的问题,这是“回馈”网站的好方法 【参考方案1】:如果你有一个边缘列表,你可以用 igraph 做一些非常相似的事情:
el <- matrix( c( "H" , "V" , "H" , "V2" , "V" , "1" , "V" , "V3" , "V3" , "3" , "V3" , "4" , "V2" , "2" , "V2" , "H2" ) , ncol = 2 , byrow = TRUE )
g <- graph.edgelist(el , directed = TRUE )
V(g)$label <- get.vertex.attribute(g, 'name')
plot(g,layout=layout.reingold.tilford)
您还可以将el
命令中的节点命名为字母,然后使用get.vertex.attribute(g, 'name')
查看生成的节点的名称,然后传递您喜欢的任何字符向量以获取图片中的标签.
【讨论】:
你能上传到网上并粘贴你得到的链接吗? (我意识到你还没有代表包括图片)。尝试使用imgur.com。您是否收到任何错误消息?您能否也将sessionInfo()
的输出粘贴到您问题中的代码块中,然后我们可以尝试找出它不同的原因。
感谢您的快速回复,这看起来很有希望!我有一个问题。当我简单地复制您在上面提供的代码时,R 会创建一个看起来完全不同的图表。设置属性directed = FALSE 稍微改进了图形,但仍然有很大不同:s22.postimg.org/uwzzrggj5/Trees.png 根据 igraph 站点,Reingold Tilford 布局应该可以解决问题,但由于某种原因,它不是从上到下创建图形正确的方法。
SessionInfo() 给出以下输出:R 版本 2.13.2 (2011-09-30) 平台:x86_64-pc-mingw32/x64(64 位)语言环境:[1] LC_COLLATE=Dutch_Netherlands .1252 LC_CTYPE=Dutch_Netherlands.1252 [3] LC_MONETARY=Dutch_Netherlands.1252 LC_NUMERIC=C [5] LC_TIME=Dutch_Netherlands.1252 附加基础包:[1] stats graphics grDevices utils datasets methods base 其他附加包:[1] igraph_0.6.5 -1
@user2215428 我使用的是旧版本的igraph
。当我更新时,我遇到了和你一样的问题。似乎 pacakge 作者更新了您需要的方法。使用graph.edgelist
而不是graph.data.frame
。顺便说一句,在 cmets 中包含代码(或内联而不是在代码块中)用反引号包围代码`所以被反引号包围的 mean() 将变为 mean()
从源代码安装失败,但我设法找到了一个旧的二进制包,现在我可以创建与上面相同的图表!非常感谢您的所有帮助:-)。【参考方案2】:
是的,rpart 可能不适合您的需要。试试phylobase 包。
如果您的树可以从文件中读取,那么您可能会使用某种 XML 树解析器,例如 this。
【讨论】:
以上是关于在 R 中创建切片树的主要内容,如果未能解决你的问题,请参考以下文章