Modular, interoperable, and extensible topological data analysis in R
University of Florida
UMR CNRS 6629, Nantes University
July 9, 2026
Topology is a branch of mathematics at the interface of geometry and analysis.
The core of Topological Data Analysis is persistent homology.
You’ve probably encountered 0-dimensional persistent homology before.
… better known as hierarchical clustering.

Persistent homology tracks not only
but also
and
3+. higher-dimensional enclosures.

Check out the Database of Original & Non-theoretical Uses of Topology:
We see (heretofore) R packages for TDA belonging to 3 types:
(ripserr, simplextree, kernelTDA, TDAvec)
(TDAstats, TDApplied, ashapesampler, lookout)
(TDA, TDAkit, rgudhi)
Each meets certain needs, but they form a fragile ecosystem:
Accessible
Empower users to learn and request.
Opinionated
Reduce burdens on collaborators & reviewers.
Modular
Ease maintenance, contributions, and extensions.
Interoperable
Reduce burdens on learners & programmers.
These principles are inspired by those of other package collections and by our own experiences as enthusiasts, users, and developers in a niche area.
Goal of the package
Current features:
vietoris_rips() binding to Ripsercubical() binding to Cubical RipserBindings, enhancements, and other contributions by Kent Phipps, Sean Hershkowitz, and Alice Zhang.
Goal of the package
Current features:
Decision-making process
metadata element is a list containing information about how the data was computed.
List of 6
$ ordered_pairs: logi TRUE
$ data : symbol S2
$ engine : chr "TDA::ripsDiag"
$ filtration : chr "Vietoris-Rips"
$ call : language TDA::ripsDiag(X = S2, maxdimension = 2, maxscale = 6)
$ parameters :List of 2
..$ maxdimension: num 2
..$ maxscale : num 6
Coerce persistence objects to other common formats:
print() method which in turn calls format().
── Persistence Data ────────────────────────────────────────────────────────────
ℹ There are 120, 14, and 1 pairs in dimensions 0, 1, and 2 respectively.
ℹ Computed from a Vietoris-Rips filtration using `TDA::ripsDiag()`.
ℹ With the following parameters: maxdimension = 2 and maxscale = 6.
Coerce from objects of class ‘diagram’ produced by TDA::*Diag() functions, objects of class ‘PHom’ produced by ripserr::vietoris_rips() and objects of class ‘hclust’ produced by stats::hclust().
── Persistence Data ────────────────────────────────────────────────────────────
ℹ There are 300 and 73 pairs in dimensions 0 and 1 respectively.
ℹ Computed from a Vietoris-Rips filtration using `::ripsDiag()`.
ℹ With the following parameters: maxdimension = 1 and maxscale = 2.
Implemented distances1
where \(X\) and \(Y\) are two persistence diagrams, \(\varphi\) is a bijection between the points of \(X\) and \(Y\) (including points on the diagonal), and \(\| \cdot \|_q\) is the \(q\)-norm in the plane.
Available functions: bottleneck_distance(), wasserstein_distance(), bottleneck_pairwise_distances and wasserstein_pairwise_distances().
Tidymodels extension for persistent homology and its vectorizations
Current features:
Umar Islambekov and Aleksei Luchinsky coordinated development of {TDAvec} with the scope and needs of {tdarec}.
Existing packages
Limitations
Goal of the package
Comparing populations of persistence diagrams
Current features
two_sample_diagram_test():
two_sample_functional_test():
Packages in development
Persistence Landscapes Toolbox C++ libraryReebGraphPairing Java programPackages in incubation
Packages in limbo
Contributing to the TDAverse
Acknowledgments
🙏 This work was funded by an ISC grant from the R Consortium that we would like to gratefully acknowledge.

Aymeric Stamm · astamm.github.io · aymeric.stamm@cnrs.fr · useR! 2026 ![]()