trav_in_edge {DiagrammeR} | R Documentation |
From a graph object of class
dgr_graph
move to incoming edges from a
selection of one or more selected nodes, thereby
creating a selection of edges. An optional filter
by edge attribute can limit the set of edges
traversed to.
trav_in_edge(graph, conditions = NULL, copy_attrs_from = NULL)
graph |
a graph object of class
|
conditions |
an option to use filtering conditions for the traversal. |
copy_attrs_from |
providing a node attribute name will copy those node attribute values to the traversed edges. If the edge attribute already exists, the values will be merged to the traversed edges; otherwise, a new edge attribute will be created. |
a graph object of class dgr_graph
.
# Set a seed set.seed(23) # Create a simple graph graph <- create_graph() %>% add_n_nodes( 2, type = "a", label = c("asd", "iekd")) %>% add_n_nodes( 3, type = "b", label = c("idj", "edl", "ohd")) %>% add_edges_w_string( "1->2 1->3 2->4 2->5 3->5", rel = c(NA, "A", "B", "C", "D")) # Create a data frame with node ID values # representing the graph edges (with `from` # and `to` columns), and, a set of numeric values df <- data.frame( from = c(1, 1, 2, 2, 3), to = c(2, 3, 4, 5, 5), values = round(rnorm(5, 5), 2)) # Join the data frame to the graph's internal # edge data frame (edf) graph <- graph %>% join_edge_attrs(df) get_edge_df(graph) #> id from to rel values #> 1 1 1 2 <NA> 6.00 #> 2 2 1 3 A 6.11 #> 3 3 2 4 B 4.72 #> 4 4 2 5 C 6.02 #> 5 5 3 5 D 5.05 # Perform a simple traversal from nodes to # inbound edges with no conditions on the # nodes traversed to graph %>% select_nodes_by_id(2) %>% trav_in_edge() %>% get_selection() #> [1] 1 # Traverse from node `2` to any inbound # edges, filtering to those edges that have # NA values for the `rel` edge attribute graph %>% select_nodes_by_id(2) %>% trav_in_edge( conditions = "is.na(rel)") %>% get_selection() #> [1] 1 # Traverse from node `2` to any inbound # edges, filtering to those edges that do # not have NA values for the `rel` edge # attribute (since there are no allowed # traversals, the selection of node `2` # is retained) graph %>% select_nodes_by_id(2) %>% trav_in_edge( conditions = "!is.na(rel)") %>% get_selection() #> [1] 2 # Traverse from node `5` to any inbound # edges, filtering to those edges that have # numeric values greater than `5.5` for # the `rel` edge attribute graph %>% select_nodes_by_id(5) %>% trav_in_edge( conditions = "values > 5.5") %>% get_selection() #> [1] 4 # Traverse from node `5` to any inbound # edges, filtering to those edges that # have values equal to `D` for the `rel` # edge attribute graph %>% select_nodes_by_id(5) %>% trav_in_edge( conditions = "rel == 'D'") %>% get_selection() #> [1] 5 # Traverse from node `5` to any inbound # edges, filtering to those edges that # have values in the set `C` and `D` for # the `rel` edge attribute graph %>% select_nodes_by_id(5) %>% trav_in_edge( conditions = "rel %in% c('C', 'D')") %>% get_selection() #> [1] 4 5 # Traverse from node `5` to any inbound # edges, and use multiple conditions for the # traversal (using a vector in `conditions` # creates a set of `AND` conditions) graph %>% select_nodes_by_id(5) %>% trav_in_edge( conditions = c( "rel %in% c('C', 'D')", "values > 5.5")) %>% get_selection() #> [1] 4 # Traverse from node `5` to any inbound # edges, and use multiple conditions with # a single-length vector (here, using a # `|` to create a set of `OR` conditions) graph %>% select_nodes_by_id(5) %>% trav_in_edge( conditions = c( "rel %in% c('D', 'E') | values > 5.5")) %>% get_selection() #> [1] 4 5 # Traverse from node `5` to any inbound # edges, and use a regular expression as # a filtering condition graph %>% select_nodes_by_id(5) %>% trav_in_edge( conditions = "grepl('C|D', rel)") %>% get_selection() #> [1] 4 5