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 nndist
dalam spatstat
paket memiliki argumen k
yang menentukan urutan tetangga. Untuk mendapatkan jarak tetangga terdekat kedua, gunakan k=2
. Untuk mendapatkan tetangga pertama dan kedua, gunakan k=1:2
.