Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- simple_graph = list(a = c('a', 'b', 'cc'), b = c('b', 'd'), cc = c('cc', 'd'), d = 'd')
- extract_branches <- function(x, graph){
- br <- graph[[x]]
- if(length(br) == 1) x else {
- if(length(br) == 2) paste(x, extract_branches(br[2], graph), sep = "|") else {
- sapply(br[-1], FUN = function(z) sapply(extract_branches(z, graph), FUN = function(w){paste(x, w, sep = "|")}, USE.NAMES = FALSE))
- }}
- }
- extract_branches('a', simple_graph)
- # b cc
- # "a|b|d" "a|cc|d"
- graph1 <- list(a = c('a', 'b', 'cc'), b = c('b', 'z'), cc = c('cc', 'd', 'g', 'h'), d = c('d', 'e', 'f'), e = c('e', 'z'), f = c('f', 'z'), g =c('g', 'z'), h = c('h', 'i', 'j'), i = c('i', 'd'), j = c('j', 'e'), z = 'z')
- extract_branches('a', graph1)
- #$b
- #[1] "a|b|z"
- #$cc
- #$cc$d
- #[1] "a|cc|d|e|z" "a|cc|d|f|z"
- #$cc$g
- #[1] "a|cc|g|z"
- #$cc$h
- #[1] "a|c("cc|h|i|d|e|z", "cc|h|i|d|f|z")" "a|cc|h|j|e|z"
- graph2 <- list(a = c('a', 'b', 'cc'), b = c('b', 'z'), cc = c('cc', 'd', 'h'), d = c('d', 'e', 'f'), e = c('e', 'z'), f = c('f', 'z'), h = c('h', 'i', 'j'), i = c('i', 'd'), j = c('j', 'e'), z = 'z')
- extract_branches('a', graph2)
- #$b
- #[1] "a|b|z"
- #$cc
- #$cc[[1]]
- #[1] "a|cc|d|e|z"
- #$cc[[2]]
- #[1] "a|cc|d|f|z"
- #$cc[[3]]
- #[1] "a|cc|h|i|d|e|z" "a|cc|h|i|d|f|z"
- #$cc[[4]]
- #[1] "a|cc|h|j|e|z"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement