Взаимодействовать с ошибкой API в R для зацикливания - PullRequest
0 голосов
/ 19 мая 2018

Я искал, как безуспешно взаимодействовать с ошибкой API внутри R-функций.Я нашел решения с tryCatch(), но я не осознаю этого, поэтому я решил спросить здесь.

У меня есть такой набор данных, как это ниже.

fluxo <-
  structure(list(code_o = c("355030802000004", "355030802000012", "355030802000013",
                            "355030802000014", "355030802000030", "355030802000036"),
                 code_d = c("3503488", "3503488", "3503488", "3503488", "3503488",  "3503488"),
                 fx = c(-46.70104009, -46.69845387, -46.69815333, 
                        -46.70141047, -46.69755981, -46.69996442),
                 fy = c(-23.55023455, -23.54720393, -23.55123612,
                        -23.55210794, -23.54364215, -23.55333346),
                 tx = c(-46.7224721383401, -46.7224721383401, -46.7224721383401,
                        -46.7224721383401, -46.7224721383401, -46.7224721383401),
                 ty = c(-23.5375321244996, -23.5375321244996, -23.5375321244996,
                        -23.5375321244996, -23.5375321244996, -23.5375321244996)),
            .Names = c("code_o", "code_d", "fx", "fy", "tx", "ty"),
            row.names = c(NA, 6L), class = "data.frame")

Чтобы найти расстояния и длительность пути между точками code_o и code_d, я использую функцию dist_google() из пакета stplanr, которая взаимодействует с Google Distance Matrix API.Функция получает только все-все-все результаты (все code_o ко всем code_d), и мне нужны только заданные пары строк.Потому что ниже я написал цикл для выполнения этой задачи.

library(stplanr)

tempos_falta_ubs <- data.frame()

for (linha in 1:nrow(fluxo)) {
  origin <- fluxo[linha, 3:4]
  destiny  <- fluxo[linha, 5:6]
  tempos_falta_ubs <- rbind(tempos_falta_ubs,
                   dist_google(from=origin,
                               to=destiny,
                               mode='walking'))
}

Но иногда он возвращает это сообщение об ошибке:

Error: No results for this request (e.g. due to lack of support for this mode between the from and to locations).

Когда это происходит, я хочу пропустить эту пару строквведите еще одну строку в tempos_falta_ubs (с NA во всех столбцах) и переходите к следующей.Я делаю это вручную, но это отстой.Как я могу сделать это автоматически без остановки цикла?

Заранее спасибо.

1 Ответ

0 голосов
/ 19 мая 2018
empty_line <- structure(list(
  from_addresses = NA_character_, to_addresses = NA_character_, 
  distances = NA_integer_, duration = NA_integer_, currency = NA, fare = NA
), .Names = c("from_addresses", "to_addresses", "distances", "duration", "currency", "fare"), 
row.names = "NA", class = "data.frame")

for (linha in seq_len(nrow(fluxo))) {
  origin <- fluxo[linha, 3:4]
  destiny  <- fluxo[linha, 5:6]
  x <- tryCatch(dist_google(from=origin, to=destiny, mode='walking'), error = function(e) empty_line)
  tempos_falta_ubs <- rbind(tempos_falta_ubs, x)
}
...