首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jsonlite和For循环问题

Jsonlite和For循环问题
EN

Stack Overflow用户
提问于 2017-05-22 14:33:46
回答 1查看 309关注 0票数 1

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

代码语言:javascript
复制
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
}

错误如下所示

代码语言:javascript
复制
Retrieving query 1
Retrieving query 2
Retrieving query 3
Error in open.connection(con, "rb") : HTTP error 503.

然后,我必须重复重新启动整个过程以获得所需的数据。有没有一种方法可以在不丢失进度的情况下重试自己?

EN

回答 1

Stack Overflow用户

发布于 2017-05-22 15:36:27

This answer on SO描述了在出现错误/异常的情况下重试迭代的有用片段。您的代码(不可能重现BTW,因为您没有为file.list赋值任何内容)将如下所示:

代码语言:javascript
复制
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()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44106060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档