# \donttest{
if(require(sp, quietly = TRUE)) {
library(sf)
data(meuse, package = "sp")
meuse <- st_as_sf(meuse, coords = c("x", "y"), crs = 28992,
agr = "constant")
# create reference and target obs
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( st_geometry(pts), pch=19, main="KNN")
plot(st_geometry(meuse[nn[,1],]), pch=19, col="red", add=TRUE)
# Using covariates (weights)
wx = as.matrix(st_drop_geometry(meuse[,1:3]))
wy = as.matrix(st_drop_geometry(pts[,1:3]))
( nn <- knn(pts, meuse, k=2, ids = "IDS", indexes = TRUE,
weights.y=wy, weights.x=wx) )
plot(st_geometry(pts), pch=19, main="KNN")
plot(st_geometry(meuse[nn[,1],]), pch=19, col="red")
# Using coordinate matrices
y <- st_coordinates(pts)[,1:2]
x <- st_coordinates(meuse)[,1:2]
knn(y, x, k=2)
} else {
cat("Please install sp package to run example", "\n")
}
# }
Run the code above in your browser using DataLab