在 R 中导入 JSON 文件时忽略错误

问题描述:

我有这个 for 循环,它从 solr 搜索服务器下载一个 json 文件.它循环包含关键字(在本例中为 100)的向量:

I have this for loop that download a json file from a solr search server. It loops over a vector that contain keywords (100, in this case):

library(jsonlite)
for (i in 1:100) {
  docs <- fromJSON(paste("http://myurl.com/solr/select?df=topic&fq=",keywords[i],"&indent=on&q=*:*&rows=1&wt=json",sep=""))
  numFound <- docs$response$numFound
  print(numFound)
}

它工作正常,直到遇到在 solr 上找不到的某个关键字,并返回此错误:

It works fine, until it reaches a certain keyword that is not found on the solr, and returns this error:

Error in open.connection(con, "rb") : HTTP error 400.

然后循环停止.

有没有办法忽略错误并继续循环?

Is there a way to ignore the error and proceed the loop?

我已经使用 tryCatch 阅读了一些东西,但仍然无法弄清楚.

I've read something using tryCatch but still couldn't figure it out.

tryCatch 更简单,您可以在关键字循环中使用函数 try.这将尝试加载 URL,但如果遇到错误将打印错误但继续下一个关键字.

Simpler than tryCatch, you can use the function try inside your keyword loop. This will attempt to load the URL, but if an error is encountered will print the error but continue to the next keyword.

library(jsonlite)
for (i in 1:100) {
  try({
    docs <- fromJSON(paste("http://myurl.com/solr/select?df=topic&fq=",keywords[i],"&indent=on&q=*:*&rows=1&wt=json",sep=""))
    numFound <- docs$response$numFound
    print(numFound)
  })
}

如果您也不想打印错误,请指定silent = TRUE:

If you also don't want to have the errors printed, specify silent = TRUE:

library(jsonlite)
for (i in 1:100) {
  try({
    docs <- fromJSON(paste("http://myurl.com/solr/select?df=topic&fq=",keywords[i],"&indent=on&q=*:*&rows=1&wt=json",sep=""))
    numFound <- docs$response$numFound
    print(numFound)
  }, silent = TRUE)
}