Odpowiedzi:
Funkcja get.knnx w pakiecie FNN może obliczyć N najbliższych sąsiadów we wzorcach punktowych.
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
teraz nn $ nn.index jest macierzą taką, że nn $ nn.index [i, j] jest rzędem w x1 dwóch najbliższych sąsiadów do rzędu i w x2 - posortowanym tak, że najbliższym jest [i, 1], i następnym sąsiadem jest [i, 2].
Funkcja zwraca również odległości i ma kilka opcji obliczania indeksów przestrzennych w celu bardzo szybkiego wyszukiwania.
Właśnie odkryłem, że spatstat ma funkcję crossdist .
Opis
Oblicza odległości między parami „rzeczy” pobranych z dwóch różnych zestawów danych.
Jako dane wejściowe przyjmuje dwa wzorce punktowe X i Y i zwraca macierz, której wejście [i, j] to odległość od X [i] do Y [j]. Aby uzyskać drugiego najbliższego sąsiada za pomocą crossdist:
xdistances <- crossdist(X, Y) #Get all cross distances
nn = numeric()
for (i in 1:nrow(X)) {
xdistance <- sort(xdistances[i,], partial=2)[2]
nn <- append(nn, xdistance)
}
Wiem, że już zaakceptowałem odpowiedź Spacedmana, ale chciałbym podzielić się tym, jak to zrobiłem w inny sposób.
Funkcja nndist
w spatstat
pakiecie ma argument, k
który określa kolejność sąsiadów. Aby uzyskać odległość drugiego najbliższego sąsiada, użyj k=2
. Aby uzyskać zarówno pierwszego, jak i drugiego sąsiada, użyj k=1:2
.