Yanıtlar:
FNN paketindeki get.knnx işlevi, N-en yakın komşularını nokta düzeninde hesaplayabilir.
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
şimdi nn $ nn.index, nn $ nn.index [i, j], x2'de i satırına en yakın iki komşunun x1'indeki sıra olacak şekilde bir matristir - en yakın olan [i, 1] ve sonraki komşu [i, 2].
İşlev sizin için mesafeleri de döndürür ve çok hızlı aramalar için uzamsal dizinleri hesaplamak için bazı seçeneklere sahiptir.
Sadece keşfetti spatstat bir sahiptir crossdist işlevi.
Açıklama
İki farklı veri kümesinden alınan 'şeyler' çiftleri arasındaki mesafeleri hesaplar.
Girişler olarak X ve Y iki nokta deseni alır ve [i, j] girişi X [i] ile Y [j] arasındaki mesafe olan matrisi döndürür. Crossdist kullanarak en yakın ikinci komşuları almak için:
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'ın cevabını zaten kabul ettiğimi biliyorum ama bunu nasıl yaptığımı başka bir şekilde paylaşmak istiyorum.
Fonksiyon nndist
olarak spatstat
paketin bir argüman k
komşu sırasını belirler. En yakın ikinci komşu mesafeyi bulmak için tuşunu kullanın k=2
. Hem birinci hem de ikinci komşuları almak için kullanın k=1:2
.