我有一个 Dataframe 类似于这个:
Df = data.frame(Address = c("ANDRES DUARTE 37, ALAGÓN (ZARAGOZA)", "CASTILLO 5, ALAGÓN (ZARAGOZA)", "PORTILLO 4, ALAGÓN (ZARAGOZA)"),
Latitude = rep(NA, 3),
Longitude = rep(NA, 3))
我试图通过使用caRtociudad
包对Address
列中的地址进行地理编码来填充Latitude
和Longitude
列中的值,我能想到的最简单的解决方案是执行for()
循环:
for (i in 1:nrow(Df)) {
Loc <- caRtociudad::cartociudad_geocode(Df$Address[i])
Df$Latitude[i] = Loc$lat
Df$Longitude[i] = Loc$lng
}
问题是,真实的的Df
对象有超过250000行,我想通过使用foreach
包的并行编程来加速这个过程,但由于各种原因,我目前所尝试的并没有达到预期的效果。
我的第一个尝试是这样的:
Df$Latitude <- foreach(i = 1:nrow(Df), .combine = c, .packages = "caRtociudad") %dopar% {
Lat = try(cartociudad_geocode(Df$Address[i]))
if(class(Lat)[1] == "try-error"){
Lat = NA
} else {
Lat = Loc$lat
}
return(Lat)
}
Df$Longitude <- foreach(i = 1:nrow(Df), .combine = c, .packages = "caRtociudad") %dopar% {
Lon = try(cartociudad_geocode(Df$Address[i]))
if(class(Lon)[1] == "try-error"){
Lon = NA
} else {
Lon = Loc$lng
}
return(Lon)
}
这会失败,因为即使地址不同,它也会为所有值返回相同的坐标。
然后我试着:
foreach(i = 1:nrow(Df), .combine = "rbind", .packages = "caRtociudad", .export = "Df") %dopar% {
Loc = cartociudad_geocode(Df$Address[i])
Df$Latitude[i] <<- Loc$lat
Df$Longitude[i] <<- Loc$lng
}
但这会返回:我尝试了其他几次迭代,但都返回了类似的错误,我真的不知道该再尝试什么。
任何帮助都将不胜感激。
1条答案
按热度按时间fcipmucu1#
正如@罗兰在评论中指出的,问题出在我自己的代码中,因为我拼错了两个变量。