Assortment of header-only libraries

Overview

assorthead vendors an assortment of header-only C++ libraries for use in Bioconductor packages. The use of a central repository avoids duplicate vendoring of libraries across multiple R packages, and enables better coordination of version updates across cohorts of interdependent C++ libraries. This package is minimalistic by design to ensure that downstream packages are not burdened with more transitive dependencies.

Quick start

To use assorthead in a Bioconductor package, just add it to the LinkingTo field in the DESCRIPTION:

LinkingTo: assorthead

The package C++ code can #include any of the available libraries, for example:

#include "Eigen/Dense"
#include "annoy/annoylib.h"
#include "annoy/kissrandom.h"
#include "tatami/tatami.hpp"

Available libraries

Name Version Description
tatami v3.1.1 C++ API for matrix representations
tatami_stats v1.1.2 Compute statistics from tatami matrices
tatami_mult v0.1.2 Multiplication of tatami matrices
tatami_chunked v2.0.1 tatami extension for chunked matrices
manticore v1.0.2 Execute arbitrary functions on the main thread
tatami_r v2.0.1 tatami extension for R matrices
tatami_hdf5 v2.0.3 tatami extension for HDF5 matrices
tatami_tiledb v2.0.0 tatami extension for TileDB matrices
byteme v1.2.2 C++ interfaces for reading/writing byte buffers
aarand v1.0.2 Lightweight random distribution functions
powerit v2.0.1 Power iterations
irlba v2.0.0 C++ port of IRLBA, based on the irlba R package
WeightedLowess v2.1.2 Lowess trend fitting with weights, à la limma::weightedLowess
kmeans v3.1.0 C++ port of stats::kmeans with various initialization methods
knncolle v2.3.2 C++ API for nearest-neighbor searches
knncolle_annoy v0.1.1 knncolle extension for Annoy
knncolle_hnsw v0.1.1 knncolle extension for HNSW
kaori v1.1.2 Sequence alignment and counting for CRISPR guides
nenesub v0.1.0 Subsampling based on nearest neighbors
raiigraph v1.1.0 C++ wrappers around igraph data structures
scran_qc v0.1.0 Simple quality control for single-cell data
scran_norm v0.1.0 Scaling normalization for single-cell data
scran_variances v0.1.3 Variance modelling and feature selection for single-cell data
scran_pca v0.1.0 Principal components analysis for single-cell data
scran_graph_cluster v0.1.1 Graph-based clustering for single-cell data
scran_markers v0.1.1 Marker detection for groups of interest in single-cell data
scran_aggregate v0.2.1 Aggregating expression data for groups of cells
scran_blocks v0.1.0 Blocking utilities for all libscran libraries
annoy v1.17.2 Approximate nearest neighbors oh yeah
hnswlib v0.8.0 Hierarchical navigable small worlds for finding nearest neighbors
Eigen 3.4.0 C++ template library for linear algebra
gsdecon v0.1.0 Compute gene set scores via eigengenes
clrm1 v0.1.0 Compute gene set scores via eigengenes
mnncorrect v2.0.0 Batch correction with mutual nearest neighbors
qdtsne v2.0.1 Quick-and-dirty t-SNE in C++
umappp v2.0.1 C++ implementation of the UMAP algorithm
mumosa v0.1.0 Simple multi-modal analyses of single-cell data
subpar v0.3.1 Substitutable parallelization for C++ libraries
singlepp v2.0.0 Cell type annotation for single-cell expression data
millijson v1.0.1 Lightweight JSON parsing library
uzuki2 v1.4.0 Storing simple R lists inside HDF5 or JSON
ritsuko v0.5.2 Helper functions for ArtifactDB libraries
takane v0.7.1 ArtifactDB file validators
chihaya v1.1.0 A C++ validator for delayed array operations

Using interfaces

The beachmat package contains the initializeCpp() function, which creates an external pointer to a tatami::Matrix. Similarly, the BiocNeighbors package can create external pointers to various knncolle objects via its defineBuilder() and buildIndex() functions. Downstream packages can use these pointers in their own C++ code by compiling against the relevant interfaces in assorthead. This means that downstream packages do not need to re-compile all of the relevant header libraries to get full functionality of beachmat, BiocNeighbors, etc. It also allows the C++ code of downstream packages to handle extensions to each framework, e.g., new matrix types in beachmat.hdf5. Check out each of the packages for more specific instructions on how to use its external pointers.

Contributing

If you want to add new libraries or update existing versions, make a pull request with appropriate motifications in the inst/fetch.R file.