Jawaban:
Fungsi get.knnx dalam paket FNN dapat menghitung N-tetangga terdekat dalam pola titik.
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
sekarang nn $ nn.index adalah sebuah matriks sehingga nn $ nn.index [i, j] adalah baris dalam x1 dari dua tetangga terdekat ke baris i di x2 - disortir sehingga yang terdekat adalah [i, 1], dan tetangga berikutnya adalah [i, 2].
Fungsi ini juga mengembalikan jarak untuk Anda, dan memiliki beberapa opsi untuk menghitung indeks spasial untuk pencarian yang sangat cepat.
Saya baru saja menemukan bahwa spatstat memiliki fungsi crossdist .
Deskripsi
Menghitung jarak antara pasangan 'barang' yang diambil dari dua dataset berbeda.
Dibutuhkan dua pola titik X dan Y sebagai input, dan mengembalikan matriks yang entri [i, j] adalah jarak dari X [i] ke Y [j]. Untuk mendapatkan tetangga terdekat kedua menggunakan 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)
}
Saya tahu saya sudah menerima jawaban Spacedman tetapi saya ingin membagikan bagaimana saya melakukannya dengan cara lain.
Fungsi nndistdalam spatstatpaket memiliki argumen kyang menentukan urutan tetangga. Untuk mendapatkan jarak tetangga terdekat kedua, gunakan k=2. Untuk mendapatkan tetangga pertama dan kedua, gunakan k=1:2.