【问题标题】:R: How to traverse from root node to each leaf node in an iGraph data object and get the path?R:如何从根节点遍历到 iGraph 数据对象中的每个叶节点并获取路径?
【发布时间】:2014-09-10 05:37:58
【问题描述】:

我是 R 新手,我有一个图形对象,它是从数据框对象“allTog”创建的,如下所示:

library(igraph)
df.g <- graph.data.frame(d = allTog, directed = TRUE)
plot(df.g, vertex.label = V(df.g)$name)

allTog 数据框由下式给出

allTog <- data.frame(
    source = c("chamber", "chamber", "chamber", "chamber", "chamber", 
    "check", "check", "issue", "issue", "issue"), 
    target = c("check", "issue", "leak", "process", "found", "power", 
    "customer", "customer", "wafer", "replaced") 
    )

“row.names”和“values”列在这里没有意义。

如何从每个根节点(在本例中为“chamber”)遍历每个叶节点并获取路径,即所有节点(顶点)名称?我正在寻找一个通用的解决方案,因为我的根节点可以随着代码的每次运行而改变。例如在下一次运行中,根节点可以是“问题”。

我想要的输出是:

chamber->check->power
chamber->issue->replaced
chamber->process
chamber->issue->customer

等等……

【问题讨论】:

  • 目前还不清楚您希望输出是什么。你真的需要横向吗?您似乎不是在沿着收集任何信息的节点交谈。另外,您如何定义每个集群中的根节点?是只有传入链接的节点吗?总会有其中之一吗?我只是想确保我完全理解你的测试数据。因为您正在询问从每个叶子到每个根的路径,但现在这些都是一条边。
  • 根节点由 Rshiny UI 中的用户下拉菜单定义。这就是为什么根节点可以改变的原因。永远只有一个根节点。例如:在另一个运行中,根节点可以是“wafer”。我也编辑了这个问题,也许这会更清楚。

标签: r graph igraph treenode


【解决方案1】:

怎么样

root <- "chamber"
leafnodes <- sapply(V(df.g), function(x) length(neighbors(df.g,x))==0 )
paths <- get.all.shortest.paths(df.g, V(df.g)[root], leafnodes)$res
sapply(paths, function(vs) paste(V(df.g)[vs]$name, collapse="->"))

这列出了您可以到达的所有叶节点

# [1] "chamber->leak"            "chamber->process"         "chamber->found"          
# [4] "chamber->check->power"    "chamber->issue->customer" "chamber->check->customer"
# [7] "chamber->issue->wafer"    "chamber->issue->replaced"

【讨论】:

  • 好点@thelatemail 我想我错过了仅从根到叶的部分。会更新。
  • 嘿,谢谢你的想法。我看到这个图中有 8 条路径。但是 get.shortest.paths 只返回 7 条路径。 “房间->问题->客户”丢失。反正有没有得到所有 8 条路径?
  • 我接受这个答案,因为我决定使用这个看似部分的输出。谢谢大家的帮助!
  • @user1452759 我已更新答案以返回从根到叶的所有最短路径,而不仅仅是任意路径。因此,如果有多种方法可以到达叶子的根(以最少的步骤),那么两条路径都将返回,因此您将同时获得“chamber->issue->customer”和“chamber->check->客户”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 2017-11-06
  • 2017-05-01
相关资源
最近更新 更多