Uses a kd-tree to find the p number of near neighbours for each point in an input/output dataset. The advantage of the kd-tree is that it runs in O(M log M) time.
Arguments
- data
An M x d data.frame or matrix, where each of the M rows is a point or a (column) vector (where d=1).
- query
A set of N x d points that will be queried against
data
. d, the number of columns, must be the same asdata
. If missing, defaults todata
.- k
The maximum number of nearest neighbours to compute. The default value is set to the smaller of the number of columnns in data
- treetype
Character vector specifying the standard
'kd'
tree or a'bd'
(box-decomposition, AMNSW98) tree which may perform better for larger point sets- searchtype
See details
- radius
Radius of search for searchtype='radius'
- eps
Error bound: default of 0.0 implies exact nearest neighbour search
Value
A list
of length 2 with elements:
- nn.idx
A N x k integer
matrix
returning the near neighbour indices.- nn.dists
A N x k
matrix
returning the near neighbour Euclidean distances.
Details
The RANN
package utilizes the Approximate Near Neighbor (ANN) C++
library, which can give the exact near neighbours or (as the name suggests)
approximate near neighbours to within a specified error bound. For more
information on the ANN library please visit
https://www.cs.umd.edu/~mount/ANN/.
Search types: priority
visits cells in increasing order of distance
from the query point, and hence, should converge more rapidly on the true
nearest neighbour, but standard is usually faster for exact searches.
radius
only searches for neighbours within a specified radius of the
point. If there are no neighbours then nn.idx will contain 0 and nn.dists
will contain 1.340781e+154 for that point.
References
Bentley J. L. (1975), Multidimensional binary search trees used for associative search. Communication ACM, 18:309-517.
Arya S. and Mount D. M. (1993), Approximate nearest neighbor searching, Proc. 4th Ann. ACM-SIAM Symposium on Discrete Algorithms (SODA'93), 271-280.
Arya S., Mount D. M., Netanyahu N. S., Silverman R. and Wu A. Y (1998), An optimal algorithm for approximate nearest neighbor searching, Journal of the ACM, 45, 891-923.
Examples
x1 <- runif(100, 0, 2*pi)
x2 <- runif(100, 0,3)
DATA <- data.frame(x1, x2)
nearest <- nn2(DATA,DATA)