knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) options(bigANNOY.progress = FALSE) set.seed(20260326) library(bigANNOY) library(bigmemory) ref_dense <- matrix( c( 0.0, 0.1, 0.2, 0.3, 0.1, 0.0, 0.1, 0.2, 0.2, 0.1, 0.0, 0.1, 1.0, 1.1, 1.2, 1.3, 1.1, 1.0, 1.1, 1.2, 1.2, 1.1, 1.0, 1.1, 3.0, 3.1, 3.2, 3.3, 3.1, 3.0, 3.1, 3.2 ), ncol = 4, byrow = TRUE ) ref_big <- as.big.matrix(ref_dense) dim(ref_big) index_path <- tempfile(fileext = ".ann") index <- annoy_build_bigmatrix( ref_big, path = index_path, n_trees = 20L, metric = "euclidean", seed = 123L, load_mode = "lazy" ) index annoy_is_loaded(index) self_result <- annoy_search_bigmatrix( index, k = 2L, search_k = 100L ) self_result$index round(self_result$distance, 3) annoy_is_loaded(index) str(self_result, max.level = 1) query_dense <- matrix( c( 0.05, 0.05, 0.15, 0.25, 1.05, 1.05, 1.10, 1.25, 3.05, 3.05, 3.15, 3.25 ), ncol = 4, byrow = TRUE ) query_result <- annoy_search_bigmatrix( index, query = query_dense, k = 3L, search_k = 100L ) query_result$index round(query_result$distance, 3) index_out <- big.matrix(nrow(query_dense), 2L, type = "integer") distance_out <- big.matrix(nrow(query_dense), 2L, type = "double") streamed <- annoy_search_bigmatrix( index, query = query_dense, k = 2L, xpIndex = index_out, xpDistance = distance_out ) bigmemory::as.matrix(index_out) round(bigmemory::as.matrix(distance_out), 3) annoy_close_index(index) annoy_is_loaded(index) reopened <- annoy_open_index(index$path, load_mode = "eager") annoy_is_loaded(reopened) validation <- annoy_validate_index(reopened, strict = TRUE, load = TRUE) validation$valid validation$checks[, c("check", "passed", "severity")]