assorthead 1.0.1
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.
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"
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.0 | 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 |
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.1 | 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.2 | 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.0 | 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 |
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.
If you want to add new libraries or update existing versions,
make a pull request with appropriate motifications in the inst/fetch.R
file.