Моя конечная цель — соединить всех ближайших соседей набора зданий (на основе евклидова расстояния) на ggmap, используя geom_path из пакета ggplot2. Мне нужна помощь с циклом, который позволит мне максимально легко построить все соседи
Я создал матрицу расстояний (называемую «kmnew») в километрах между тремя типами зданий в Пекине: B (x2), D (x2) и L (x1):
B B D D L
B NA 6.599014 5.758531 6.285787 3.770175
B NA NA 7.141096 3.873296 5.092667
D NA NA NA 3.690725 2.563017
D NA NA NA NA 2.832083
L NA NA NA NA NA
Я пытаюсь определить ближайших соседей каждого здания по строке, объявив матрицу и используя цикл для определения ближайшего соседнего здания:
nn <- matrix(NA,nrow=5,ncol=1)
for (i in 1:nrow(kmnew)){
nn[i,] <- which.min(kmnew[i,])
}
Это возвращает следующую ошибку (не уверен, почему):
Error in nn[i, ] <- which.min(kmnew[i, ]) : replacement has length zero
но, кажется, возвращает правильный ответ на nn:
[,1]
[1,] 5
[2,] 4
[3,] 5
[4,] 5
[5,] NA
Я добавляю это к исходному кадру данных с именем newbjdata:
colbj <- cbind(newbjdata,nn)
который возвращает
Name Store sqft long lat nn
1 B 1 1200 116.4579 39.93921 5
2 B 2 750 116.3811 39.93312 4
3 D 1 550 116.4417 39.88882 5
4 D 2 600 116.4022 39.90222 5
5 L 1 1000 116.4333 39.91100 NA
Затем я получаю свою карту через ggmap:
bjgmap <- get_map(location = c(lon = 116.407395,lat = 39.904211),
zoom = 13, scale = "auto",
maptype = "roadmap",
messaging = FALSE, urlonly = FALSE,
filename = "ggmaptemp", crop = TRUE,
color = "bw",
source = "google", api_key)
Моя конечная цель — сопоставить ближайших соседей вместе на графике, используя geom_path из пакета ggplot.
Например, номер 1-го корпуса типа Б (1-й ряд) — это 1-й корпус типа Л (5-й ряд). Очевидно, я могу нарисовать эту линию, подставив указанные 2 строки фрейма данных таким образом:
ggmap(bjgmap) +
geom_point(data = colbj, aes(x = long,y = lat, fill = factor(Name)),
size =10, pch = 21, col = "white") +
geom_path(data = subset(colbj[c(1,5),]), aes(x = long,y = lat),col = "black")
Однако мне нужно решение, которое работает как цикл, и я не могу понять, как этого можно добиться, поскольку мне нужно ссылаться на столбец nn и возвращать его к длинным данным lat n раз. Я вполне могу поверить, что использую не самый эффективный метод, поэтому открыт для альтернатив. Любая помощь высоко ценится.