使用先前stackoverflow中的此代码函数:R: How to GeoCode a simple address using Data Science Toolbox
require("RDSTK")
library(httr)
library(rjson)
geo.dsk <- function(addr){ # single address geocode with data sciences toolkit
require(httr)
require(rjson)
url <- "http://www.datasciencetoolkit.org/maps/api/geocode/json"
response <- GET(url,query=list(sensor="FALSE",address=addr))
json <- fromJSON(content(response,type="text"))
loc <- json['results'][[1]][[1]]$geometry$location
return(c(address=addr,long=loc$lng, lat= loc$lat))
}
现在示例代码。这很好用:
City<-c("Atlanta, USA", "Baltimore, USA", "Beijing, China")
r<- do.call(rbind,lapply(as.character(City),geo.dsk))
这不起作用。它说:“json中的错误[”结果“] [[1]] [[1]]:下标越界”
Citzy<-c("Leicester, United Kingdom")
do.call(rbind,lapply(as.character(Citzy),geo.dsk))
我认为错误是因为找不到城市。所以我希望代码能够忽略它并继续运行。我该怎么做呢?任何帮助将不胜感激!
答案 0 :(得分:2)
最好使用try / catch块来处理错误。在R中,看起来像这样(source):
result = tryCatch({
# write your intended code here
Citzy<-c("Leicester, United Kingdom")
do.call(rbind,lapply(as.character(Citzy),geo.dsk))
}, warning = function(w) {
# log the warning or take other action here
}, error = function(e) {
# log the error or take other action here
}, finally = {
# this will execute no matter what else happened
})
因此,如果您遇到错误,它将进入错误块(并跳过“尝试”部分中的其余代码),而不是停止您的程序。请注意,您应始终对错误“做某事”而不是完全忽略它;将消息记录到控制台和/或设置错误标志是很好的事情。