尽管存在错误,仍保持R代码运行?

时间:2014-06-30 18:28:31

标签: warnings subscript

使用先前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))

我认为错误是因为找不到城市。所以我希望代码能够忽略它并继续运行。我该怎么做呢?任何帮助将不胜感激!

1 个答案:

答案 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
})

因此,如果您遇到错误,它将进入错误块(并跳过“尝试”部分中的其余代码),而不是停止您的程序。请注意,您应始终对错误“做某事”而不是完全忽略它;将消息记录到控制台和/或设置错误标志是很好的事情。