Відповіді:
Функція get.knnx в пакеті FNN може обчислити N-найближчих сусідів у точкових шаблонах.
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
тепер nn $ nn.index є такою матрицею, що nn $ nn.index [i, j] - це рядок у x1 двох найближчих сусідів до рядка i в x2 - відсортований так, що найближчий дорівнює [i, 1], і наступний сусід - [i, 2].
Функція також повертає відстані для вас і має деякі варіанти обчислення просторових індексів для дуже швидкого пошуку.
Я тільки що виявив , що spatstat має crossdist функцію.
Опис
Обчислює відстані між парами "речей", взятих з двох різних наборів даних.
Він бере два точкові візерунки X і Y як вхідні дані і повертає матрицю, запис [i, j] - це відстань від X [i] до Y [j]. Щоб отримати другого найближчого сусіда за допомогою кросдіста:
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)
}
Я знаю, що вже прийняв відповідь Spacedman, але хотів би поділитися тим, як я це зробив по-іншому.
Функція nndist
в spatstat
пакеті має аргумент, k
який визначає порядок сусідів. Щоб отримати другу сусідню відстань, використовуйте k=2
. Щоб отримати і першого, і другого сусідів, використовуйте k=1:2
.