【问题标题】:R: Error in file(con, "r") : cannot open the connectionR:文件错误(con,“r”):无法打开连接
【发布时间】:2018-03-05 14:52:42
【问题描述】:

我正在尝试使用 R 中的 lapply 函数对多个参数运行 API 请求。

但是,当我运行此函数时,我收到错误“文件中的错误(con,“r”):无法打开连接”

Google 建议使用 setInternet2(TRUE) 来解决此问题,但是,我收到错误消息:错误:'setInternet2' is defunct。 查看帮助(“已失效”

localisedDestinationNameForGivenLang <- function (LocationId) {
 gaiaURL <- paste0("https://URL/",LocationId, "?geoVersion=rwg&lcid=", "1036", 
"&cid=geo&apk=explorer")
 print(LocationId)
 localisation <- fromJSON(gaiaURL)
}

lapply(uniqueLocationId, localisedDestinationNameForGivenLang)

有人可以建议修复吗?

【问题讨论】:

  • 请提供您尝试运行的实际代码以及哪一行失败的示例。
  • @ErikKornet 我已经更新了描述,谢谢!
  • 看起来存储在 gaiaURL 中的内容的一些迭代不可连接。您能否判断您的任何 LocationID 值是否有效,和/或哪个无效?
  • @ErikKornet - 你是对的,一些 LocationID 会产生 400 错误。作为我的 ID 列表 ~ 17,000,如果不调用 API,它们显然不是不正确的,你知道如何解决这个问题吗?也许 tryCatch()?
  • 将发布回复作为答案

标签: r


【解决方案1】:

下面是一个示例,说明如何识别哪些网站正在抛出错误,同时仍能从未抛出错误的网站获得响应:

urls = c("http://citibikenyc.com/stations/test", "http://citibikenyc.com/stations/json")

grab_data     <-    function(url) {
  out <- tryCatch(
    {fromJSON(url)}, 
    error=function(x) {
      message(paste(url, x))
      error_msg = paste(url, "threw an error")
      return(error_msg)
    })
    return(out)
}

result <- lapply(urls, grab_data)

result 将是一个列表,其中包含有效 url 的 API 响应,以及无效的错误消息。

【讨论】:

  • 太棒了,谢谢。尽管抛出错误,这是否会继续该过程?
  • 是的,并将存储在result 中哪些站点引发了错误。 length(result) 将等于 length(urls)
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多