scran_graph_cluster
Graph-based clustering of cells
|
This repository implements functions for construction and clustering of a nearest-neighbor graph created from single-cell data. Each node in the graph is a cell where edges are formed between neighboring cells in expression space, thus allowing us to identify communities of closely-related cells. The code itself was originally derived from the scran R package, been factored out into a separate C++ library for easier re-use.
Given a column-major array of cell coordinates (typically in some low-dimensional space), we can construct a shared nearest-neighbor (SNN) graph from each cell's list of neighbors:
We perform community detection via some convenience wrappers around the igraph library:
Check out the reference documentation for more details.
FetchContent
If you're using CMake, you just need to add something like this to your CMakeLists.txt
:
Then you can link to scran_graph_cluster to make the headers available during compilation:
This will fetch all external dependencies except for igraph, which should already be installed and available via find_package()
. Users can set the SCRAN_GRAPH_CLUSTER_FIND_IGRAPH
option to disable igraph discovery (e.g., to supply a custom igraph installation), in which case they will need to link to igraph manually in their target_link_libraries()
call. Users are also advised to pin the versions of all dependencies - see extern/CMakeLists.txt
for suggested versions. If you want to install each dependency, use -DSCRAN_GRAPH_CLUSTER_FETCH_EXTERN=OFF
.
find_package()
To install the library, use:
Again, this will use FetchContent
to fetch all external dependencies except for igraph, see comments above.
If you're not using CMake, the simple approach is to just copy the files in include/
- either directly or with Git submodules - and include their path during compilation with, e.g., GCC's -I
. This requires the external dependencies listed in extern/CMakeLists.txt
as well as the igraph library.