user1452759
user1452759

Reputation: 9460

R: How to traverse from root node to each leaf node in an iGraph data object and get the path?

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)

enter image description here

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

Answers (1)

MrFlick
MrFlick

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

Related Questions