Jsonlite和For循环问题

时间:2017-05-22 06:33:46

标签: r for-loop jsonlite

我正在从谷歌趋势下载数据。有时连接会丢失,我必须从头开始重新启动循环(1-726)。假设错误仍在第721次尝试,我必须再次从1重新启动它。

library(jsonlite)
baseurl <- "https://www.googleapis.com/trends/v1beta/graph?&terms="
for(i in 1:726){
mydata <- fromJSON(paste0(baseurl, file.list$query[i]), flatten=TRUE)
message("Retrieving query ", i)
pages[[i]] <- mydata$lines
}

错误看起来很

Retrieving query 1
Retrieving query 2
Retrieving query 3
Error in open.connection(con, "rb") : HTTP error 503.

然后我必须重复重启整个过程以获得所需的数据。可以有一种方法可以自行重试而不会失去进度吗?

1 个答案:

答案 0 :(得分:1)

在SO上的

This回答描述了在错误/异常的情况下重试迭代的有用片段。您的代码(无法复制BTW,因为您没有为file.list分配任何内容)这样的代码段如下所示:

library(jsonlite)
baseurl <- "https://www.googleapis.com/trends/v1beta/graph?&terms="
for(i in 1:726){
  mydata<-NULL
  attempt <- 1
  while( is.null(mydata) && attempt <= 3 ) {
    attempt <- attempt + 1
    try(
      mydata <- fromJSON(paste0(baseurl, file.list$query[i]), flatten=TRUE)
    )
  } 
    message("Retrieving query ", i)
  pages[[i]] <- mydata$lines
}

随意更改while条件下的尝试次数。此外,原因可能是每秒请求数量的限制 - 正如digEmAll建议的那样,尝试添加Sys.sleep()