Вместо использования цикла for
, purrr::map_dfr
будет перебирать вектор и связывать результирующие кадры данных в один, что здесь удобно. Например,
library(tidyverse)
libraries <- tribble(
~library, ~address,
"Library of Congress", "101 Independence Ave SE, Washington, DC 20540",
"British Library", "96 Euston Rd, London NW1 2DB, UK",
"New York Public Library", "476 5th Ave, New York, NY 10018",
"Library and Archives Canada", "395 Wellington St, Ottawa, ON K1A 0N4, Canada"
)
library_locations <- map_dfr(libraries$address, ggmap::geocode,
output = "more", source = "dsk")
Это выведет много сообщений, некоторые из которых сообщают вам, что звонит geocode
, например,
#> Information from URL : http://www.datasciencetoolkit.org/maps/api/geocode/json?address=101%20Independence%20Ave%20SE,%20Washington,%20DC%2020540&sensor=false
и некоторые предупреждения о том, что факторы приводятся к характеру:
#> Warning in bind_rows_(x, .id): Unequal factor levels: coercing to character
#> Warning in bind_rows_(x, .id): binding character and factor vector,
#> coercing into character vector
какими они должны быть, чтобы вы могли игнорировать их все. (Если вы действительно хотите, вы можете написать больше кода, чтобы они исчезли, но в итоге вы получите то же самое.)
Объедините полученные фреймы данных, и вы получите все данные о местоположении, связанные с вашим исходным набором данных:
full_join(libraries, library_locations)
#> Joining, by = "address"
#> # A tibble: 4 x 15
#> library address lon lat type loctype north south east west
#> <chr> <chr> <dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Librar… 101 In… -77.0 38.9 stre… rooftop 38.9 38.9 -77.0 -77.0
#> 2 Britis… 96 Eus… -0.125 51.5 stre… rooftop 51.5 51.5 -0.124 -0.126
#> 3 New Yo… 476 5t… -74.0 40.8 stre… rooftop 40.8 40.8 -74.0 -74.0
#> 4 Librar… 395 We… -114. 60.1 coun… approx… 83.1 41.7 -52.3 -141.
#> # … with 5 more variables: street_number <chr>, route <chr>,
#> # locality <chr>, administrative_area_level_1 <chr>, country <chr>
Вы можете заметить, что Data Science Toolkit совершенно не удалось геокодировать библиотеки и архивы Канады по любой причине - он помечен как страна, а не как адрес. Геокодеры иногда неисправны. Отсюда выделите все, что вам не нужно.
Если вам нужна еще больше информации, вы можете использовать метод geocode
output = "all"
, но он возвращает список, который вам нужно проанализировать, что требует больше работы.