r - перечисление и построение графиков ближайших соседей с использованием пакета spdep
Это мое первое использование spdep
пакет в R, так что я надеялся, что кто-то может мне помочь с несколькими вещами.
Давайте рассмотрим следующие моменты.
set.seed(1)
loc <- data.frame(id=1:15,
x=sample(-10:10,15,replace=TRUE),
y=sample(-10:10,15,replace=TRUE))
plot(loc[,-1],asp=1)
text(loc$x, loc$y, cex=0.7, pos=3)
По сути, я хочу построить пути, соединяя точки, которые находятся ближе всего друг к другу. Например, если нам нужны пути длиной 3, и мы начинаем с точки 1, то мы должны перейти к точке 11, а затем, наконец, к точке 10. Вот другие пути, которые я получил вручную.
[,1] [,2] [,3]
[1,] 1 11 10
[2,] 2 5 14
[3,] 2 14 3
[4,] 2 14 5
[5,] 3 14 2
[6,] 4 7 15
[7,] 4 15 13
[8,] 5 2 14
[9,] 6 3 14
[10,] 7 4 15
[11,] 8 13 15
[12,] 9 15 13
[13,] 10 11 1
[14,] 11 1 2
[15,] 12 10 11
[16,] 13 15 4
[17,] 14 2 5
[18,] 15 13 4
[19,] 15 13 8
Я пытаюсь получить эту же информацию, используя функции в spdep
пакет. Это насколько я получил:
library(spdep)
loc_copy <- loc
coordinates(loc_copy) <- c("x","y")
coords <- coordinates(loc_copy)
n2 <- knn2nb(knearneigh(coords, k=2), row.names=loc$id)
plot(c(-10,10), c(-10, 10), type='n', xlab="x", ylab="y", asp=1)
abline(v=0, col="grey"); abline(h=0,col="grey")
plot(n2, coords, add=TRUE)
text(loc$x, loc$y, cex=0.7, pos=3)
Получившийся сюжет - почти то, что я хочу, за исключением того, что некоторые точки, которые не должны быть связаны, соединены. Например, точки 11 и 12 не должны быть связаны, потому что мы не можем перейти напрямую из пункта 11 в 12 или наоборот. Я, вероятно, не создал n2
правильно. Как мне это исправить? И как мне посмотреть список соседей, похожий на тот, что у меня в матрице из ранее?