Risposte:
La funzione get.knnx nel pacchetto FNN può calcolare i vicini N-più vicini in schemi di punti.
x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)
ora nn $ nn.index è una matrice tale che nn $ nn.index [i, j] è la riga in x1 dei due vicini più vicini alla riga i in x2 - ordinata in modo che il più vicino sia [i, 1] e il prossimo vicino è [i, 2].
La funzione restituisce anche le distanze per te e ha alcune opzioni per calcolare gli indici spaziali per ricerche molto veloci.
Ho appena scoperto che spatstat ha una funzione crossdist .
Descrizione
Calcola le distanze tra coppie di "cose" prese da due diversi set di dati.
Prende due modelli di punti X e Y come input e restituisce la matrice la cui voce [i, j] è la distanza da X [i] a Y [j]. Per ottenere il secondo vicino più vicino usando 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)
}
So di aver già accettato la risposta di Spacedman ma vorrei condividere il modo in cui l'ho fatto in un altro modo.
La funzione nndistnel spatstatpacchetto ha un argomento kche determina l'ordine dei vicini. Per ottenere la seconda distanza vicina più vicina, usare k=2. Per ottenere sia il primo che il secondo vicino, usa k=1:2.