R: Как пройти от корневого узла до каждого конечного узла в объекте данных iGraph и получить путь?

Я новичок в 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->check->power
chamber->issue->replaced
chamber->process
chamber->issue->customer

Ну и так далее....

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"
Другие вопросы по тегам