## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup, message=FALSE----------------------------------------------------- library(rgph) library(dplyr) library(tidyr) library(ggplot2) ## ----example calculation------------------------------------------------------ ex_file <- system.file("extdata", "running_example.txt", package = "rgph") ex_reeb <- read_reeb_graph(ex_file) ( ex_multi <- reeb_graph_pairs(ex_reeb, method = "multi_pass") ) ( ex_single <- reeb_graph_pairs(ex_reeb, method = "single_pass") ) all.equal(ex_multi, ex_single) ## ----example validation------------------------------------------------------- all.equal(ex_multi, ex_single, check.attributes = FALSE) ## ----example benchmark-------------------------------------------------------- bench::mark( multi = reeb_graph_pairs(ex_reeb, method = "multi_pass"), single = reeb_graph_pairs(ex_reeb, method = "single_pass"), check = FALSE ) ## ----flower data-------------------------------------------------------------- # print only a few edges for illustration print(flower, n = 4) ## ----flower isolates---------------------------------------------------------- # print only a few pairs for illustration print(reeb_graph_pairs(flower, method = "multi_pass"), n = 4) ## ----flower benchmark--------------------------------------------------------- flower <- rgph:::drop_reeb_graph_points(flower) bench::mark( multi = reeb_graph_pairs(flower, method = "multi_pass"), single = reeb_graph_pairs(flower, method = "single_pass"), check = FALSE ) ## ----random (split) trees benchmark------------------------------------------- # collect split tree Reeb graphs tree_files <- vapply( c( `10` = "10_tree_iterations.txt", `100` = "100_tree_iterations.txt", `1000` = "1000_tree_iterations.txt" ), function(f) system.file("extdata", f, package = "rgph"), "" ) tree_reebs <- lapply(tree_files, read_reeb_graph) tree_reebs <- lapply(tree_reebs, function(rg) { rg$values <- -rg$values; rg }) # aggregate benchmark comparisons tree_bench <- tibble() for (i in seq_along(tree_reebs)) { bm <- bench::mark( multi = reeb_graph_pairs(tree_reebs[[i]], method = "multi_pass"), single = reeb_graph_pairs(tree_reebs[[i]], method = "single_pass"), check = FALSE ) bm <- transmute( bm, method = as.character(expression), n_itr, time, memory ) bm <- relocate(mutate(bm, size = as.integer(names(tree_files)[[i]])), size) tree_bench <- bind_rows(tree_bench, bm) } ## ----random (split) trees plot, fig.width=8, fig.height=4, out.width="100%"---- # plot runtime results tree_bench %>% select(size, method, time) %>% unnest(time) %>% ggplot(aes(x = as.factor(size), y = time * 1e3)) + geom_boxplot(aes(color = method, shape = method)) + scale_y_continuous( transform = "log1p", labels = scales::label_number(suffix = "ms") ) + labs(x = "tree size", y = "run time") ## ----random (split) trees medians--------------------------------------------- tree_bench %>% transmute(size, method, median = vapply(time, median, 0.)) %>% pivot_wider(id_cols = size, names_from = method, values_from = median) %>% transmute(size, ratio = single / multi)