Извините, что это будет вопрос для цикла 101. Я изо всех сил, чтобы написать простой цикл для генерации таблицы расстояний между городами на основе данных широты долготыИспользование простого цикла для пространственных данных
locations <-read.csv("distances.csv")
местоположения возвращает следующую таблицу:
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, который требует матрицы длиной однолатовых значений, так что я могу удалить текст следующим образом:
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 (i in 1:nrow(datmax2)){
kmnew <- spDistsN1(datmax2, datmax2[i,], longlat=TRUE)
}
Это дает мне правильные значения для Нью-Йорка:
[1] 5436.133 12967.023 6697.541 0.000
Таким образом, я полагаю, что я переписал один город другим во время цикла. Я ценю помощь в том, чтобы показать мне, где я ошибаюсь. Большое спасибо.
Все ответы здесь действительно полезны. Доминику легче всего понять, основываясь на моих мысленных процессах. «apply» - это элегантное решение благодаря Dimitris, и Nicola я проверю этот пакет, хотя, как вы, вероятно, можете сказать по моим попыткам, выходить за рамки 2D-мышления может занять некоторое время! – RichS