Функция по парам строк вместо всех для всех (dist_google stplanr в R)
Я работаю с данными OD с пакетом stplanr. Я заинтересован в этом пакете, чтобы рассчитать расстояние и время прохождения маршрута, особенно для пешеходных и общественных видов транспорта. У меня есть некоторые координаты точек OD, полученные из od2odf(), используемого на объекте линий желаний. Как я могу выполнить dist_google() пакета stplanr только для пар строк, а не для всех, как функция?
dline_coords <-
structure(list(code_o = c("355030843000199", "355030892000149"
), code_d = c("2787458", "2027720"), fx = c(-46.75786949, -46.59211679
), fy = c(-23.68324013, -23.49609762), tx = c(-46.7574929661601,
-46.5905849090996), ty = c(-23.6920856941273, -23.4999753327844
)), .Names = c("code_o", "code_d", "fx", "fy", "tx", "ty"), row.names = c(55L,
130L), class = "data.frame")
Каждая пара точек представляет собой комбинированные строки, переменные fx и fy, представляющие точки "from" и tx, и связывающие точки "to".
print(dline_coords)
code_o code_d fx fy tx ty
55 355030843000199 2787458 -46.75787 -23.68324 -46.75749 -23.69209
130 355030892000149 2027720 -46.59212 -23.49610 -46.59058 -23.49998
Если я вызываю функцию, она рассчитывает расстояние и время маршрута для всех комбинаций пар:
library(stplanr)
distances <- dist_google(from=dline_coords[1:2,3:4], to=dline_coords[1:2,5:6], mode="walking")
dim(distances)
[1] 4 6
# if line index is not explicit, it returns an error
# distances <- dist_google(from=dline_coords[,3:4], to=dline_coords[,5:6])
Но я хочу получить этот результат вместо комбинаций "все ко всем":
distances <-
rbind(dist_google(from=dline_coords[1,3:4], to=dline_coords[1,5:6]),
dist_google(from=dline_coords[2,3:4], to=dline_coords[2,5:6]))
print(distances)
Obs: Мне нужно сделать это для тысячи случаев, но API ограничен до 100 результатов на вызов.
Кто-нибудь может мне помочь?
1 ответ
Поделиться своим решением! Это была простая задача, но я только учусь работать с циклами и функциями. Через некоторое время, прочитав немного, я сделал это с помощью этого for
зацикливание кода:
distances <- data.frame()
for (line in 1:nrow(dline_coords)) {
origin <- dline_coords[line 3:4]
destiny <- dline_coords[line 5:6]
distances <- rbind(distances, dist_google(from=origin to=destiny mode='walking'))
}
И я получил то, что искал. Просто пары строк:
from_addresses to_addresses distances duration currency fare
1 R. Magister Leoninus, 33-171 - Jardim Santa Margarida, São Paulo - SP, Brazil Rua Ignácio Limas, 10 - Jardim Angela, São Paulo - SP, 04920-050, Brazil 1378 1160 NA NA
2 R. Guilherme Baer, 211 - Vila Medeiros, São Paulo - SP, Brazil R. André da Fonseca, 71 - Vila Maria, São Paulo - SP, 02135-010, Brazil 675 572 NA NA
Вместо этого вывода, полученного оригинальным способом, который является всеми источниками для всех назначений:
from_addresses to_addresses distances duration currency fare
1 R. Magister Leoninus, 33-171 - Jardim Santa Margarida, São Paulo - SP, Brazil Rua Ignácio Limas, 10 - Jardim Angela, São Paulo - SP, 04920-050, Brazil 1378 1160 NA NA
2 R. Magister Leoninus, 33-171 - Jardim Santa Margarida, São Paulo - SP, Brazil R. André da Fonseca, 71 - Vila Maria, São Paulo - SP, 02135-010, Brazil 29523 22764 NA NA
3 R. Guilherme Baer, 204-210 - Vila Medeiros, São Paulo - SP, Brazil Rua Ignácio Limas, 10 - Jardim Angela, São Paulo - SP, 04920-050, Brazil 30808 23783 NA NA
4 R. Guilherme Baer, 204-210 - Vila Medeiros, São Paulo - SP, Brazil R. André da Fonseca, 71 - Vila Maria, São Paulo - SP, 02135-010, Brazil 675 572 NA NA