Функция по парам строк вместо всех для всех (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
Другие вопросы по тегам