Title: Fast and Efficient Graph Data Structures
Version: 0.18.2
Description: Seamlessly build and manipulate graph structures, leveraging its high-performance methods for filtering, joining, and mutating data. Ensures that mutations and changes to the graph are performed in place, streamlining your workflow for optimal productivity.
License: MIT + file LICENSE
URL: https://github.com/ixpantia/orbweaver-r
BugReports: https://github.com/ixpantia/orbweaver-r/issues
Depends: R (≥ 4.2.0)
Imports: glue, methods, rlang
Suggests: testthat (≥ 3.0.0)
Config/rextendr/version: 0.3.1.9001
Config/testthat/edition: 3
Encoding: UTF-8
RoxygenNote: 7.3.2
SystemRequirements: Cargo (Rust's package manager) >= 1.70, rustc >= 1.70
Config/Needs/website: rmarkdown
NeedsCompilation: yes
Packaged: 2025-04-21 15:21:23 UTC; andres
Author: ixpantia, SRL [cph], Andres Quintero [aut, cre], The authors of the dependency Rust crates [ctb] (see inst/AUTHORS file for details)
Maintainer: Andres Quintero <andres@ixpantia.com>
Repository: CRAN
Date/Publication: 2025-04-28 13:50:07 UTC

Add an edge to a graph builder

Description

Adds an edge from one node to another in a a directed graph builder.

Usage

add_edge(graph_builder, from, to)

Arguments

graph_builder

A graph builder_object

from

The from node.

to

The to node.

Value

The updated graph builder object

See Also

Other build graphs: add_path(), build_acyclic(), build_directed(), graph_builder(), populate_edges()

Examples

graph_builder() |>
  add_edge("A", "B")

Add a path to a graph

Description

Adds all of the edges that make up the given path to the graph.

Usage

add_path(graph_builder, path)

Arguments

graph_builder

A graph builder_object

path

A character vector that describes the path

Value

The updated graph builder object

See Also

Other build graphs: add_edge(), build_acyclic(), build_directed(), graph_builder(), populate_edges()

Examples

graph_builder() |>
  add_path(c("A", "B", "C"))

Build a DirectedAcyclicGraph from a builder

Description

Builds a graph builder into a new DirectedAcyclicGraph object.

NOTE: This will consume the builder. It will leave an empty builder in its place.

Usage

build_acyclic(graph_builder)

Arguments

graph_builder

A graph builder object

Value

A DirectedAcyclicGraph Object

See Also

Other build graphs: add_edge(), add_path(), build_directed(), graph_builder(), populate_edges()

Examples

graph_builder() |>
  add_path(c("1", "2", "3", "4")) |>
  build_acyclic()

Build a DirectedGraph from a builder

Description

Builds a graph builder into a new DirectedGraph object.

NOTE: This will consume the builder. It will leave an empty builder in its place.

Usage

build_directed(graph_builder)

Arguments

graph_builder

A graph builder object

Value

A DirectedGraph Object

See Also

Other build graphs: add_edge(), add_path(), build_acyclic(), graph_builder(), populate_edges()

Examples

graph_builder() |>
  add_path(c("1", "2", "3", "4")) |>
  build_directed()

Get the children on a node

Description

Get a list of the node ids of the children of the provided node.

Usage

children(graph, nodes)

Arguments

graph

A graph object

nodes

A character vector of nodes to find children for

Value

A character vector

Examples

graph <- graph_builder() |>
  add_edge(from = "A", to = "B") |>
  build_directed()

graph |> children("A")

Find all paths between two nodes

Description

Find all the paths between two nodes in a graph.

Not all graphs support this function. Currently only DirectedAcyclicGraph supports this.

Usage

find_all_paths(graph, from, to)

Arguments

graph

A graph object

from

The starting node of the path

to

The ending node of the path

Value

A list of character vectors

See Also

Other analyze graphs: find_path(), find_path_one_to_many(), get_all_leaves(), get_all_roots(), get_leaves_under(), get_roots_over(), least_common_parents()

Examples

graph <- graph_builder() |>
  add_path(c("A", "B", "C")) |>
  add_path(c("A", "Z", "C")) |>
  add_path(c("A", "B", "A")) |>
  build_directed()

find_all_paths(graph, "A", "C")

Find a path between two nodes

Description

Finds a path between two nodes in a graph.

Different types of graphs use different algorithms to find the paths. a DirectedGraph uses breadth-first search while an DirectedAcyclicGraph uses topological sort.

The path is represented as a character vector with the node ids of the nodes that make up the path.

Usage

find_path(graph, from, to)

Arguments

graph

A graph object

from

The starting node of the path

to

The ending node of the path

Value

A character vector

See Also

Other analyze graphs: find_all_paths(), find_path_one_to_many(), get_all_leaves(), get_all_roots(), get_leaves_under(), get_roots_over(), least_common_parents()

Examples

graph <- graph_builder() |>
  add_path(c("A", "B", "C")) |>
  build_directed()

find_path(graph, "A", "C")

Find the a valid path from one node to many

Description

Find a valid path from one node to many

Usage

find_path_one_to_many(graph, from, to)

Arguments

graph

A graph object

from

The starting node of the path

to

A character vector of nodes

Value

A list of paths

See Also

Other analyze graphs: find_all_paths(), find_path(), get_all_leaves(), get_all_roots(), get_leaves_under(), get_roots_over(), least_common_parents()

Examples

edges <- data.frame(
  parent = c("A", "A", "B", "Z"),
  child =  c("B", "Z", "Z", "F")
)

graph <- graph_builder() |>
  populate_edges(edges, parent, child) |>
  build_acyclic()

find_path_one_to_many(graph, "A", edges$child)

Get all the leaf nodes of a graph

Description

Retrieves the nodes in a graph that have no children

Usage

get_all_leaves(graph, ...)

Arguments

graph

A graph object

...

Unused

Value

A character vector of nodes

See Also

Other analyze graphs: find_all_paths(), find_path(), find_path_one_to_many(), get_all_roots(), get_leaves_under(), get_roots_over(), least_common_parents()

Examples

graph <- graph_builder() |>
  add_path(c("A", "B", "C")) |>
  add_path(c("A", "D", "C")) |>
  add_path(c("Z", "B", "C")) |>
  add_path(c("Z", "B", "H")) |>
  build_directed()

get_all_leaves(graph)

Get the all the root nodes of a graph

Description

Retrieves the nodes in a graph that have no parents

Usage

get_all_roots(graph, ...)

Arguments

graph

A graph object

...

Unused

Value

A character vector of nodes

See Also

Other analyze graphs: find_all_paths(), find_path(), find_path_one_to_many(), get_all_leaves(), get_leaves_under(), get_roots_over(), least_common_parents()

Examples

graph <- graph_builder() |>
  add_path(c("A", "B", "C")) |>
  add_path(c("A", "D", "C")) |>
  add_path(c("Z", "B", "C")) |>
  build_directed()

get_all_roots(graph)

Get leaves as a data frame

Description

Get leaves of a set of nodes in a data frame format.

Usage

get_leaves_as_df(graph, nodes)

Arguments

graph

A graph object

nodes

A character vector of node IDs

Value

A data frame of leaves


Get the leaf nodes of a graph under some nodes

Description

Retrieves the nodes in a graph that have no children under a certain node or group of nodes

Usage

get_leaves_under(graph, nodes)

Arguments

graph

A graph object

nodes

A character vector of nodes to find leaves for

Value

A character vector of nodes

See Also

Other analyze graphs: find_all_paths(), find_path(), find_path_one_to_many(), get_all_leaves(), get_all_roots(), get_roots_over(), least_common_parents()

Examples

graph <- graph_builder() |>
  add_path(c("A", "B", "C")) |>
  add_path(c("A", "D", "C")) |>
  add_path(c("Z", "B", "C")) |>
  add_path(c("Z", "B", "H")) |>
  build_directed()

get_leaves_under(graph, "D")

Get the root nodes of a graph over some nodes

Description

Retrieves the nodes in a graph that have no parents over a certain node or group of nodes

Usage

get_roots_over(graph, nodes)

Arguments

graph

A graph object

nodes

A character vector of nodes to find roots for

Value

A character vector of nodes

See Also

Other analyze graphs: find_all_paths(), find_path(), find_path_one_to_many(), get_all_leaves(), get_all_roots(), get_leaves_under(), least_common_parents()

Examples

graph <- graph_builder() |>
  add_path(c("A", "B", "C")) |>
  add_path(c("A", "D", "C")) |>
  add_path(c("Z", "B", "C")) |>
  build_directed()

get_roots_over(graph, "D")

A new builder for a graph based on the type

Description

Object used to build graphs

Usage

graph_builder(type = c("directed"))

Arguments

type

The type of graph

Value

An object of class 'DirectedGraphBuilder'.

See Also

Other build graphs: add_edge(), add_path(), build_acyclic(), build_directed(), populate_edges()

Examples

graph_builder()

Read the graph from a binary blob

Description

Read the graph from a binary blob

Usage

graph_from_bin(path, bin, type = c("directed", "dag"))

Arguments

path

(Optional) Path to a file containing a graph binary

bin

(Optional) The raw binary of the graph

type

The type of graph the JSON represents

Value

A graph object

See Also

Other graphs i/o: graph_to_bin()

Examples

bin <- graph_builder() |>
  add_edge("A", "B") |>
  build_directed() |>
  graph_to_bin()
bin

graph_from_bin(bin = bin)

Save the graph into a binary blob

Description

Save the graph into a binary blob

Usage

graph_to_bin(graph, path)

Arguments

graph

A graph object

path

Path to a file to save the graph into

Value

Run for its side-effects

See Also

Other graphs i/o: graph_from_bin()

Examples

graph <- graph_builder() |>
  add_edge("A", "B") |>
  build_directed()

graph_to_bin(graph)

Checks if a node in a graph has children

Description

This function validates if the node has an edge pointing to any other node.

Usage

has_children(graph, nodes)

Arguments

graph

A graph object

nodes

A character vector of nodes to determine

Value

A logical vector with the same length as nodes

Examples

graph <- graph_builder() |>
  add_edge(from = "A", to = "B") |>
  build_directed()
graph

graph |> has_children(nodes = "A")
graph |> has_children(nodes = "B")

Checks if a node in a graph has parents

Description

This function validates if any edge points to the given node.

Usage

has_parents(graph, nodes)

Arguments

graph

A graph object

nodes

A character vector of nodes to determine

Value

A logical vector with the same length as nodes

Examples

graph <- graph_builder() |>
  add_edge(from = "A", to = "B") |>
  build_directed()
graph

graph |> has_parents(nodes = "A")
graph |> has_parents(nodes = "B")

Find the least common parents in a graph

Description

It finds the nodes that have no parents in the given set.

Usage

least_common_parents(graph, selected)

Arguments

graph

A graph object

selected

A character vector of node ids

Value

A character vector of node ids

See Also

Other analyze graphs: find_all_paths(), find_path(), find_path_one_to_many(), get_all_leaves(), get_all_roots(), get_leaves_under(), get_roots_over()

Examples

graph_edges <- data.frame(
  parent = c("A", "B", "C", "C", "F"),
  child = c("B", "C", "D", "E", "D")
)

graph <- graph_builder() |>
  populate_edges(graph_edges, parent, child) |>
  build_directed()
graph

graph |> least_common_parents(c("D", "E"))

Get the nodes in the graph

Description

Returns the unique nodes in the graph

Usage

nodes(graph, ...)

Arguments

graph

A directed or directed acyclic graph

...

Reserved for later use

Value

A character vector with the nodes

Examples

graph <- graph_builder() |>
  add_edge(from = "A", to = "B") |>
  build_directed()
graph

nodes(graph)

Get the parents on a node

Description

Get a list of the node ids of the parents of the provided node.

Usage

parents(graph, nodes)

Arguments

graph

A graph object

nodes

A character vector of nodes to find parents for

Value

A character vector

Examples

graph <- graph_builder() |>
  add_edge(from = "A", to = "B") |>
  build_directed()

graph |> parents("A")
graph |> parents("B")

Populates the edges of a graph from a data.frame

Description

Adds a set of edges from a data.frame to a graph

Usage

populate_edges(graph_builder, edges_df, parent_col, child_col)

Arguments

graph_builder

A graph builder object

edges_df

A data.frame with a parent and child variable

parent_col

The name of the column containing the parents

child_col

The name of the column containing the children

Value

The updated graph builder object

See Also

Other build graphs: add_edge(), add_path(), build_acyclic(), build_directed(), graph_builder()

Examples

graph_edges <- data.frame(
  parent = c("A", "B", "C"),
  child = c("B", "C", "D")
)

graph_builder() |>
  populate_edges(
    edges_df = graph_edges,
    parent_col = "parent",
    child_col = "child"
  )