ripserr ports the Ripser and Cubical Ripser persistent homology calculation engines from C++ via Rcpp. It can be used as a convenient and rapid calculation tool in topological data analysis pipelines.
# install development version devtools::install_github("rrrlw/ripserr") # install from CRAN (not available yet) # install.packages("ripserr")
Ripser (Vietoris-Rips complex) can be used as follows for data with dimension greater than or equal to 2.
# load ripserr library("ripserr") set.seed(42) SIZE <- 100 # 2-dimensional example dataset2 <- rnorm(SIZE * 2) dim(dataset2) <- c(SIZE, 2) vr_phom2 <- vietoris_rips(dataset2) head(vr_phom2) #> dimension birth death #> 1 0 0 0.01004861 #> 2 0 0 0.02923702 #> 3 0 0 0.04550504 #> 4 0 0 0.06829826 #> 5 0 0 0.06853393 #> 6 0 0 0.07187663 tail(vr_phom2) #> dimension birth death #> 112 1 0.3916344 0.4239412 #> 113 1 0.3906770 0.5577989 #> 114 1 0.3880186 0.4029842 #> 115 1 0.3703398 0.5007012 #> 116 1 0.3330234 0.3416054 #> 117 1 0.2418318 0.2504820 # 3-dimensional example dataset3 <- rnorm(SIZE * 3) dim(dataset3) <- c(SIZE, 3) vr_phom3 <- vietoris_rips(dataset3, max_dim = 2) # default: max_dim = 1 head(vr_phom3) #> dimension birth death #> 1 0 0 0.1282935 #> 2 0 0 0.1421812 #> 3 0 0 0.1516424 #> 4 0 0 0.1819928 #> 5 0 0 0.1858051 #> 6 0 0 0.2114116 tail(vr_phom3) #> dimension birth death #> 132 1 0.5212961 0.5233529 #> 133 2 1.1829207 1.1999911 #> 134 2 1.1194325 1.3245908 #> 135 2 1.0707410 1.0914850 #> 136 2 0.9433034 0.9867254 #> 137 2 0.6882204 0.6913078
Cubical Ripser (cubical complex) can be used as follows for data with dimension equal to 2, 3, or 4.
# load ripserr library("ripserr") set.seed(42) SIZE <- 10 # 2-dimensional example dataset2 <- rnorm(SIZE ^ 2) dim(dataset2) <- rep(SIZE, 2) cub_phom2 <- cubical(dataset2) head(cub_phom2) #> dimension birth death #> 1 0 -1.1943289 -0.8607926 #> 2 0 -2.4142076 -0.8509076 #> 3 0 -0.8113932 -0.7844590 #> 4 0 -1.7170087 -0.7844590 #> 5 0 -0.7272921 -0.5428288 #> 6 0 -0.9535234 -0.5428288 tail(cub_phom2) #> dimension birth death #> 22 1 0.8217731 0.9333463 #> 23 1 0.7681787 1.0385061 #> 24 1 0.7581632 1.5757275 #> 25 1 0.7208782 1.3025426 #> 26 1 0.6792888 1.4441013 #> 27 1 0.6359504 1.8951935 # 3-dimensional example dataset3 <- rnorm(SIZE ^ 3) dim(dataset3) <- rep(SIZE, 3) cub_phom3 <- cubical(dataset3) head(cub_phom3) #> dimension birth death #> 1 0 -1.926167 -1.737728 #> 2 0 -1.737297 -1.439229 #> 3 0 -1.924950 -1.439229 #> 4 0 -1.500221 -1.354600 #> 5 0 -2.277778 -1.354600 #> 6 0 -1.682481 -1.306676 tail(cub_phom3) #> dimension birth death #> 324 2 1.2488637 1.258482 #> 325 2 1.2009654 2.036972 #> 326 2 1.0452759 1.199978 #> 327 2 0.9885968 1.809382 #> 328 2 0.9310749 1.179696 #> 329 2 0.8447922 1.709689 # 4-dimensional example dataset4 <- rnorm(SIZE ^ 4) dim(dataset4) <- rep(SIZE, 4) cub_phom4 <- cubical(dataset4) head(cub_phom4) #> dimension birth death #> 1 0 -1.986299 -1.923519 #> 2 0 -1.822606 -1.816506 #> 3 0 -1.776392 -1.710786 #> 4 0 -1.833663 -1.710387 #> 5 0 -1.947054 -1.704791 #> 6 0 -1.701462 -1.639160 tail(cub_phom4) #> dimension birth death #> 4329 3 1.676609 2.019277 #> 4330 3 1.675766 1.932152 #> 4331 3 1.669449 2.149646 #> 4332 3 1.662486 1.863734 #> 4333 3 1.535361 1.963609 #> 4334 3 1.349235 2.263581
vietoris_rips
).cubical
).If you use the ripserr package in your work, please consider citing the following (based on use):
To contribute to ripserr, you can create issues for any bugs/suggestions on the issues page. You can also fork the ripserr repository and create pull requests to add useful features.