Reputation: 9460
I am new to R and I have a graph object which I have created from a data frame object "allTog" as shown below:
library(igraph)
df.g <- graph.data.frame(d = allTog, directed = TRUE)
plot(df.g, vertex.label = V(df.g)$name)
The allTog data frame is given by
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")
)
The columns "row.names" and "values" is of no interest here.
How can I traverse from each root node, in this case "chamber", to every leaf node and get the path i.e all the node (vertex) names? I'm looking for a generic solution because my root node can change with every run of the code. For example in the next run, the root node can be "issue".
My output that I want is:
chamber->check->power
chamber->issue->replaced
chamber->process
chamber->issue->customer
So and so forth....
Upvotes: 3
Views: 2565
Reputation: 206486
How about
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="->"))
This lists all the leaf nodes you can get to
# [1] "chamber->leak" "chamber->process" "chamber->found"
# [4] "chamber->check->power" "chamber->issue->customer" "chamber->check->customer"
# [7] "chamber->issue->wafer" "chamber->issue->replaced"
Upvotes: 6