## ----setup, include=FALSE----------------------------------------------------- knitr::opts_chunk$set(collapse = TRUE, comment = "#>") if (!requireNamespace("bigmemory", quietly = TRUE)) { cat("This vignette requires the 'bigmemory' package.\n") knitr::knit_exit() } library(bigKNN) library(bigmemory) ## ----helpers, include=FALSE--------------------------------------------------- clean_graph <- function(x) { out <- as.data.frame(x) rownames(out) <- NULL out[order(out$from, out$to), , drop = FALSE] } ## ----create-reference--------------------------------------------------------- reference_points <- data.frame( id = paste0("p", 1:6), x1 = c(0.0, 0.3, 1.2, 4.0, 4.3, 5.2), x2 = c(0.0, 0.0, 0.0, 4.0, 4.1, 4.0) ) reference <- as.big.matrix(as.matrix(reference_points[c("x1", "x2")])) reference_points ## ----directed-knn-graph------------------------------------------------------- directed_knn <- knn_graph_bigmatrix( reference, k = 1, format = "edge_list", symmetrize = "none" ) clean_graph(directed_knn) ## ----mutual-graph------------------------------------------------------------- mutual_knn <- mutual_knn_graph_bigmatrix( reference, k = 1, format = "edge_list" ) clean_graph(mutual_knn) ## ----mutual-wrapper----------------------------------------------------------- identical( clean_graph(mutual_knn), clean_graph(knn_graph_bigmatrix(reference, k = 1, format = "edge_list", symmetrize = "mutual")) ) ## ----snn-graph---------------------------------------------------------------- snn_count <- snn_graph_bigmatrix( reference, k = 2, weight = "count", format = "edge_list" ) snn_jaccard <- snn_graph_bigmatrix( reference, k = 2, weight = "jaccard", format = "edge_list" ) merge( clean_graph(snn_count), clean_graph(snn_jaccard), by = c("from", "to"), suffixes = c("_count", "_jaccard") ) ## ----radius-graph------------------------------------------------------------- radius_directed <- radius_graph_bigmatrix( reference, radius = 1.1, format = "edge_list", symmetrize = "none" ) radius_union <- radius_graph_bigmatrix( reference, radius = 1.1, format = "edge_list", symmetrize = "union" ) clean_graph(radius_directed) clean_graph(radius_union) ## ----radius-symmetry---------------------------------------------------------- identical( clean_graph(radius_graph_bigmatrix(reference, radius = 1.1, format = "edge_list", symmetrize = "union")), clean_graph(radius_graph_bigmatrix(reference, radius = 1.1, format = "edge_list", symmetrize = "mutual")) ) ## ----symmetrize-comparison---------------------------------------------------- graph_none <- knn_graph_bigmatrix(reference, k = 1, format = "edge_list", symmetrize = "none") graph_union <- knn_graph_bigmatrix(reference, k = 1, format = "edge_list", symmetrize = "union") graph_mutual <- knn_graph_bigmatrix(reference, k = 1, format = "edge_list", symmetrize = "mutual") data.frame( symmetrize = c("none", "union", "mutual"), n_edges = c(nrow(clean_graph(graph_none)), nrow(clean_graph(graph_union)), nrow(clean_graph(graph_mutual))), row.names = NULL ) ## ----graph-coercion----------------------------------------------------------- triplet_graph <- as_triplet(graph_mutual) sparse_graph <- as_sparse_matrix( knn_graph_bigmatrix( reference, k = 1, format = "edge_list", symmetrize = "union", include_distance = FALSE ) ) triplet_graph class(sparse_graph) Matrix::summary(sparse_graph) ## ----graph-roundtrip---------------------------------------------------------- clean_graph(as_edge_list(sparse_graph)) ## ----downstream-usage--------------------------------------------------------- degree <- Matrix::rowSums(sparse_graph) data.frame( vertex = reference_points$id, degree = as.numeric(degree), row.names = NULL )