Продолжить цикл, если адрес не найден - PullRequest
0 голосов
/ 21 октября 2018

AIM: Я пытаюсь получить серию карт, используя функцию get_map из ggmaps.

Я знаю следующие работы, когда я использую широту и долготу:

houses_maps <- lapply(latlon,
                  function(x)
                    get_map(location = x,
                            zoom = 20, 
                            maptype = "satellite", 
                            source = "google")) 

ПРОБЛЕМА: Это не завершает цикл, когда я использую адреса вместо широты идолгота.Вероятно, это связано с тем, что он не находит один из адресов, например, с помощью «tomet, 6-10, 25720 Bellver de Cerdanya, Lleida, Spain»

Я получаю эту ошибку:

Error in data.frame(ll.lat = ll[1], ll.lon = ll[2], ur.lat = ur[1], ur.lon = ur[2]) : 
  arguments imply differing number of rows: 0, 1
In addition: Warning message:
geocode failed with status ZERO_RESULTS, location = "tomet, 6-10, 25720 Bellver de Cerdanya, Lleida, Spain" 
Called from: data.frame(ll.lat = ll[1], ll.lon = ll[2], ur.lat = ur[1], ur.lon = ur[2])

ВОПРОС: Как я могу заставить его игнорировать адреса, которые он не мог найти, оставить их NA и продолжить поиск остальных вместо остановки.У меня 2000 адресов, и, скорее всего, их не найти.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Используйте команду try для фактического тестирования функции заранее.В вашем примере это должно быть:

houses_maps <- lapply(latlon,
                  function(x)
                  res <- try(get_map(location = x,
                            zoom = 20, 
                            maptype = "satellite", 
                            source = "google"))
                  if(inherits(res, "try-error")) next
                  else{
                    get_map(location = x,
                            zoom = 20, 
                            maptype = "satellite", 
                            source = "google")}
                  )

Я не могу проверить это сам, поэтому надеюсь, что я закрыл все скобки, но вы поняли суть.

0 голосов
/ 21 октября 2018

Поскольку у меня нет примеров данных (пожалуйста, всегда предоставляйте данные в вашем вопросе), и я не знаю многих деталей функции get_map, я демонстрирую здесь только основную идею:

# simplified example data
latlon = c("address 1", "address 2", "address 3")

# mock the function
get_map <- function(location, ...) {
  if (location == "address 2") stop(paste("geocode failed with status ZERO_RESULTS, location =", location))
  return(location)
}


houses_maps <- lapply(latlon,
                      function(x)
                        tryCatch(get_map(location = x,
                                   zoom = 20, 
                                   maptype = "satellite", 
                                   source = "google"),
                                 error = function(e) {
                                   print(e)
                                   return(NA)
                                 }))
# <simpleError in get_map(location = x, zoom = 20, maptype = "satellite",
# source = "google"): geocode failed with status ZERO_RESULTS,
# location = address 2>    

houses_maps                      
# [[1]]
# [1] "address 1"
# 
# [[2]]
# [1] NA
# 
# [[3]]
# [1] "address 3"
...