# knn

##### Spatial K nearest neighbor

Find K nearest neighbors for two spatial objects

Finds nearest neighbor in x based on y and returns rownames, index and distance, If ids is NULL, rownames of x are returned. If coordinate matrix provided, columns need to be ordered [X,Y]. If a radius for d is specified than a maximum search radius is imposed. If no neighbor is found, a neighbor is not returned

You can specify weights to act as covariates for x and y. The vectors or matrices must match row dimensions with x and y as well as columns matching between weights. In other words, the covariates must match and be numeric.

##### Usage

```
knn(
y,
x,
k = 1,
d = NULL,
ids = NULL,
weights.y = NULL,
weights.x = NULL,
indexes = FALSE
)
```

##### Arguments

- y
Spatial points or polygons object or coordinates matrix

- x
Spatial points or polygons object or coordinates matrix

- k
Number of neighbors

- d
Optional search radius

- ids
Optional column of ID's in x

- weights.y
A vector or matrix representing covariates of y

- weights.x
A vector or matrix representing covariates of x

- indexes
(FALSE/TRUE) Return row indexes of x neighbors

##### Value

A data.frame with row indexes (optional), rownames, ids (optional) and distance of k

##### See Also

`nn2`

for details on search algorithm

##### Examples

```
# NOT RUN {
library(sp)
data(meuse)
coordinates(meuse) <- ~x+y
idx <- sample(1:nrow(meuse), 10)
pts <- meuse[idx,]
meuse <- meuse[-idx,]
meuse$IDS <- 1:nrow(meuse)
# Find 2 neighbors in meuse
( nn <- knn(pts, meuse, k=2, ids = "IDS", indexes = TRUE) )
plot(pts, pch=19, main="KNN")
points(meuse[nn[,1],], pch=19, col="red")
# Using covariates (weights)
wx = as.matrix(meuse@data[,1:3])
wy = as.matrix(pts@data[,1:3])
( nn <- knn(pts, meuse, k=2, ids = "IDS", indexes = TRUE,
weights.y=wy, weights.x=wx) )
plot(pts, pch=19, main="KNN")
points(meuse[nn[,1],], pch=19, col="red")
# Using coordinate matrices
y <- coordinates(pts)
x <- coordinates(meuse)
knn(y, x, k=2)
# }
```

*Documentation reproduced from package spatialEco, version 1.3-2, License: GPL-3*