Ada beberapa cara Anda bisa mengatasi ini di R, termasuk spDists di sp dan gDistance in rgeos. Cara efisien, yang dapat diperluas ke beberapa ID kNN dan jarak, adalah dengan menggunakan spdep.
require(spdep)
data(meuse)
coordinates(meuse) = ~x+y
meuse <- meuse[1:10,]
meuse@data$IDS <- 1:10
# Neighbor row indices and add neighbor attribute ID's
( knn1 <- knearneigh(coordinates(meuse), k=1)$nn )
meuse@data$nnID <- meuse@data[knn1,]$IDS
# Add neighbor distance
meuse.dist <- dnearneigh(coordinates(meuse), 0, 1000)
dist.list <- nbdists(meuse.dist, coordinates(meuse))
meuse@data$nnDist <- unlist(lapply(dist.list, FUN=function(x) min(x)))
meuse@data
Cara lain yang sangat cepat adalah paket nabor. Karena jarak dikembalikan bersama dengan ID tetangga Anda dapat menambahkan keduanya secara bersamaan. Fungsi nabor :: knn mengembalikan tetangga sendiri sehingga, Anda harus mengatur k ke> = 2 dan menjatuhkan kolom pertama dalam matriks yang dihasilkan. Satu keuntungan di sini adalah, selama matriks adalah dimensi yang sama, Anda bisa mendapatkan tetangga dari data yang sama atau independen.
library(nabor)
library(sp)
data(meuse)
coordinates(meuse) = ~x+y
meuse <- meuse[1:10,]
meuse@data$IDS <- 1:10
knn1 <- knn( coordinates(meuse), coordinates(meuse), k=2)
( knn1 <- data.frame( knn=knn1[[1]][,2], knn.dist=knn1[[2]][,2] ) )