我正在从谷歌趋势下载数据。有时连接会丢失,我必须从头开始重新启动循环(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.
然后我必须重复重启整个过程以获得所需的数据。可以有一种方法可以自行重试而不会失去进度吗?
答案 0 :(得分:1)
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()
。