我希望使用通过ggmap
访问的Google API快速对大量地址进行地理编码(我正在使用ggmap
版本2.7,允许通过指定Google API密钥register_google()
功能)。
基本功能有效,但在以下列方式使用dplyr
时速度非常慢:
devtools::install_github("dkahle/ggmap") #needed for v 2.7, not yet on CRAN
library(dplyr)
library(ggmap)
DF %>%
select(ID, full_address) %>%
mutate_geocode(full_address)
我每秒最多获得1-3次查询,这几千条记录对我的使用速度不够快。我想使用multidplyr来运行并行查询并加快进程。
我见过一个multidplyr example on SO here,但我似乎无法为我的情况实现它。
我想象的解决方案可以使用multidplyr::partition()
并使用:
ggmap::mutate_geocode()
函数;或ggmap::geocode()
函数,它返回一对列(经度和纬度)以及dplyr::do()
函数。基于上面链接的SO示例,我相信代码看起来像这样:
library(dplyr)
library(ggmap)
devtools::install_github("hadley/multidplyr")
library(multidplyr)
DF$split <- 1:4 # the column by which data will be split across 4 threads
# For solution (1)
DF %>%
select(ID, full_address) %>%
partition(split) %>%
mutate_geocode(full_address)
# For solution (2)
DF %>%
select(ID, full_address) %>%
partition(split) %>%
do(
{ggmap::geo_code(full_address)}
)
任何人都可以帮我把它弄成正确的形状吗?有什么建议可以让它更快吗?