2017-03-29 36 views
0

我想通过for循环获取google趋势数据。但是,一个错误阻止了我。在搜索其他堆栈问题后,我仍然无法使其工作。有问题的循环:For loop跳过错误

a2p = for (i in dfurlnames$names1) 
{ 
    x<- paste(i) 
    gtrends_function3(x) 
} 

在我的for循环中,我得到以下错误:

Error : res$status_code == 200 is not TRUE 

我用下面的包和功能:

获取新gtrendsR; devtools :: install_github( 'PMassicotte/gtrendsR')

library(gtrendsR) 

gtrends_function3 <- function(x) 
{ 
    trend1 = gtrends(c(x), geo = c(""), time = "2014-01-05 2014-10-04") 
    trend_df1 = ldply(trend1) 
    return(as.numeric(trend_df1$hits))   
} 

列表:

dfurlnames$names1 = Ang babaeng humayo, The Bad Batch, Une vie, La La Land,    
The Light Between Oceans, El ciudadano ilustre, Spira Mirabilis, La región 
salvaje, Nocturnal Animals 
+0

这里没有足够的信息来真正知道某些事情。你可以通过手动设置'i < - dfurlnames $ names1 [1]'(迭代'dfurlnames'中的每一个),运行'gtrends(i,...)'(使用你的opts)来查看哪些是代码造成问题。顺便说一句:你在这里使用'paste'和'c'是不必要的,什么也不做。 – r2evans

+0

错误表明HTTP请求由于某种原因失败。可能是你的名字存在一些问题。 – neilfws

+0

当R' for'-loop出现错误时,迭代器计数器的值保留在全局环境中,所以你应该在控制台提示符处输入'i',它应该告诉你哪个'dfurlnames $ names1 '导致了这个问题。 (该“列表”看起来不像人们期望从R得到的任何输出。) –

回答

1
状态

代码200指的是HTTP协议,表明一切正常。可能你在for循环中要求的东西太快了。添加睡眠命令,例如:

Sys.sleep(1)

您的for循环会减慢速度。或者,使用tryCatch绕过:

a2p = for (i in dfurlnames$names1) 
{ 
    tryCatch({ 
     x<- paste(i) 
     gtrends_function3(x) 
    }, error=function(e) {print(e)}) 
} 
+0

错误代码表示对于某个值,响应代码不是200.这里的问题是我想跳过该值并继续循环。 – nemja

+0

是的,所以使用tryCatch。见编辑的答案。 – thc

+0

另外,for循环总是返回null,所以将它分配给一个变量没有意义。 – thc