Мне очень жаль, что это будет вопрос для цикла 101. Я изо всех сил пытаюсь написать простой цикл для создания таблицы расстояний между городами на основе данных долготы и широты.
locations <-read.csv("distances.csv")
Location возвращает следующую таблицу:
City Type long lat
1 Sheffield EUR -1.470085 53.38113
2 HK WRLD 114.109497 22.39643
3 Venice EUR 12.315515 45.44085
4 New York WRLD -74.005941 40.71278
Моя цель в этой конкретной части задачи - создать таблицу расстояний (в километрах) между каждым из городов в виде корреляционной матрицы с диагональю 0 (т. Е. Все города находятся на нулевом расстоянии от самих себя).
Для этого я использую пакет sp, для которого требуется матрица значений long-lat, поэтому я могу удалить текст следующим образом:
datmax <- data.matrix(locations)
datmax2 <- datmax[,-1:-2]
Инструмент spDistsN1 позволяет мне получить эту информацию, сравнивая расстояние между всеми городами в матрице от одного отдельного города. Ясно, что я могу использовать следующее выражение для получения расстояний до всех городов от Шеффилда (город или строка №1):
km <- spDistsN1(datmax2, datmax2[1,], longlat=TRUE)
Это правильно дает:
[1] 0.000 9591.009 1329.882 5436.133
Однако, чтобы добиться желаемого результата в стиле корреляционной матрицы, я хочу добиться этого для каждого из городов, поэтому я попытался написать цикл for:
for (i in 1:nrow(datmax2)){
kmnew <- spDistsN1(datmax2, datmax2[i,], longlat=TRUE)
}
Это дает мне правильные значения для NY:
[1] 5436.133 12967.023 6697.541 0.000
Итак, я предполагаю, что в цикле я перезаписал один город другим. Я ценю помощь, показывающую мне, в чем я ошибаюсь. Большое спасибо.