frNN {dbscan} | R Documentation |
This function uses a kd-tree to find the fixed radius nearest neighbors (including distances) fast.
frNN(x, eps, sort = TRUE, search = "kdtree", bucketSize = 10, splitRule = "suggest", approx = 0)
x |
a data matrix, a dist object or a frNN object. |
eps |
neighbors radius (dist <= eps). |
search |
nearest neighbor search strategy (one of "kdtree" or "linear", "dist"). |
sort |
sort the neighbors by distance? This is expensive and can be done later using |
bucketSize |
max size of the kd-tree leafs. |
splitRule |
rule to split the kd-tree. One of "STD", "MIDPT", "FAIR", "SL_MIDPT", "SL_FAIR" or "SUGGEST" (SL stands for sliding). "SUGGEST" uses ANNs best guess. |
approx |
use approximate nearest neighbors. All NN up to a distance of
a factor of 1+ |
For details on the parameters see kNN
.
Note: self-matches are not returned!
To create a frNN object from scratch, you need to supply at least the
elements id
with a list of integer vectors with
the nearest neighbor ids
for each point and eps
(see below).
An object of class frNN (subclass of NN) containing a list with the following components:
id |
a list of integer vectors. Each vector contains the ids of the fixed radius nearest neighbors. |
dist |
a list with distances (same structure as |
eps |
eps used. |
Michael Hahsler
David M. Mount and Sunil Arya (2010). ANN: A Library for Approximate Nearest Neighbor Searching, http://www.cs.umd.edu/~mount/ANN/.
NN
and kNN
for k nearest neighbor search.
data(iris) x <- iris[, -5] # Find fixed radius nearest neighbors for each point nn <- frNN(x, eps=.5) # Number of neighbors hist(sapply(adjacencylist(nn), length), xlab = "k", main="Number of Neighbors", sub = paste("Neighborhood size eps =", nn$eps)) # Explore neighbors of point i = 10 i <- 10 nn$id[[i]] nn$dist[[i]] plot(x, col = ifelse(1:nrow(iris) %in% nn$id[[i]], "red", "black")) # get an adjacency list head(adjacencylist(nn)) # plot the fixed radius neighbors (and then reduced to a radius of .3) plot(nn, x) plot(frNN(nn, .3), x) ## manually create a frNN object for dbscan (dbscan only needs ids and eps) nn <- list(ids = list(c(2,3), c(1,3), c(1,2,3), c(3,5), c(4,5)), eps = 1) class(nn) <- c("NN", "frNN") nn dbscan(nn, minPts = 2)