This function extracts the neighborhood of each node as a graph and maps over
each of these neighborhood graphs. Conceptually it is similar to
igraph::local_scan()
, but it borrows the type safe versions available in
map_bfs()
and map_dfs()
.
map_local(order = 1, mode = "all", mindist = 0, .f, ...) map_local_lgl(order = 1, mode = "all", mindist = 0, .f, ...) map_local_chr(order = 1, mode = "all", mindist = 0, .f, ...) map_local_int(order = 1, mode = "all", mindist = 0, .f, ...) map_local_dbl(order = 1, mode = "all", mindist = 0, .f, ...)
order | Integer giving the order of the neighborhood. |
---|---|
mode | Character constant, it specifies how to use the direction of
the edges if a directed graph is analyzed. For ‘out’ only the
outgoing edges are followed, so all vertices reachable from the source
vertex in at most |
mindist | The minimum distance to include the vertex in the result. |
.f | A function to map over all nodes. See Details |
... | Additional parameters to pass to |
map_local()
returns a list of the same length as the number of
nodes in the graph, in the order matching the node order in the graph.
map_local_*()
tries to coerce its result into a vector of the classes
logical
(map_local_lgl
), character
(map_local_chr
), integer
(map_local_int
), or double
(map_local_dbl
). These functions will throw
an error if they are unsuccesful, so they are type safe.
The function provided to .f
will be called with the following arguments in
addition to those supplied through ...
:
neighborhood
: The neighborhood graph of the node
graph
: The full tbl_graph
object
node
: The index of the node currently mapped over
The neighborhood
graph will contain an extra node attribute called
.central_node
, which will be TRUE
for the node that the neighborhood is
expanded from and FALSE
for everything else.
# Smooth out values over a neighborhood create_notable('meredith') %>% mutate(value = rpois(graph_order(), 5)) %>% mutate(value_smooth = map_local_dbl(order = 2, .f = function(neighborhood, ...) { mean(as_tibble(neighborhood, active = 'nodes')$value) }))#> # A tbl_graph: 70 nodes and 140 edges #> # #> # An undirected simple graph with 1 component #> # #> # Node Data: 70 x 2 (active) #> value value_smooth #> <int> <dbl> #> 1 7 5.73 #> 2 7 6.27 #> 3 5 6.27 #> 4 9 6.27 #> 5 6 6.36 #> 6 10 6.36 #> # … with 64 more rows #> # #> # Edge Data: 140 x 2 #> from to #> <int> <int> #> 1 1 5 #> 2 1 6 #> 3 1 7 #> # … with 137 more rows