当尝试循环搜索条件时,GTrendsR搜索charToDate(x)中的错误

时间:2014-11-19 23:57:10

标签: r google-trends

我在GTrendsR软件包上遇到错误,StackOverflow上的其他示例没有处理,也就是如何使用for或lapply功能循环几次搜索。

我做的很简单 gtrends(ch,query =“哈佛大学”,geo =“US”)

我在一个关键字上进行简单搜索时没有出现错误。

  

charToDate(x)出错:     字符串不是标准的明确格式

from lapply(queries, function(x) gtrends(ch, query = x , geo = "US"))

for (i in seq_along(queries)) {
      x <- queries[i]
      dta[i,] <-  gtrends(ch, query = x , geo = "US")$trend   # trend data.frame returned from gtrends()
}

如果需要背景和代码:我正在尝试获取IPEDS中列出的美国大学名称的Google趋势搜索记录(此US DofEd API link

我在

使用GTrendR包
devtools::install_bitbucket(repo = "gtrendsr", username="persican")

执行单个搜索字词很好。但是一旦我尝试自动化,我就会收到GTrendsR错误。

library("GTrendsR", lib.loc="~/Library/R/3.1/library")

download.file("https://inventory.data.gov/dataset/032e19b4-5a90-41dc-83ff-6e4cd234f565/resource/38625c3d-5388-4c16-a30f-d105432553a4/download/postscndryunivsrvy2013dirinfo.csv" , destfile="ipeds.csv", method="curl")

colleges <- read.csv("./ipeds.csv", header=T, stringsAsFactors=F)

queries <- colleges$INSTNM  # Institution Names

prepopulating dataframe with 3 columns from gtrends function

dta <-data.frame(matrix(NA, length(queries),3)) 

设置凭据

usr <- "your@gmail.com"
psw <- "yourpassword"
ch <- gconnect(usr, psw)

让循环自动化:

for (i in seq_along(queries)) {
      x <- queries[i]
      dta[i,] <-  gtrends(ch, query = x , geo = "US")$trend   # trend data.frame returned from gtrends()
}

lapply也不起作用:

lapply(queries, function(x) gtrends(ch, query = x , geo = "US")$trend)

我收到此错误:

  

charToDate(x)出错:     字符串不是标准的明确格式

错误似乎是由于对charToDate的依赖()我似乎无法达到目的。

然而,当我只使用3次搜索时,它可以工作:

three <- list("Harvard University", "Boston College", "Bard College")

out <- sapply(three, function(x)  cbind.data.frame(gtrends(ch, query = x , geo = "US")$trend[3])[])

1 个答案:

答案 0 :(得分:0)

这是因为当有空格时,URL /浏览器会变得生气。问题:你有搜索短语和空格。错误消息在这里没有用,但是@Richard问了一个让我思考正确的问题。

所以你传递带空格的术语,但谷歌想要+而不是空格。 gsub救援。

x <- "one two three"
gsub("\\s+", "\\+", x)

## [1] "one+two+three"

所以现在应用于这个问题......我还在那里扔了try来处理你可能遇到的错误。这将返回一个数据框列表。

colleges <- read.csv("ipeds.csv", header=TRUE, stringsAsFactors=FALSE)
queries <- colleges[["INSTNM"]]
dta <- data.frame(matrix(NA, length(queries),3)) 

usr <- "email@gmail.com"
psw <- "password"
ch <- gconnect(usr, psw)

output <- lapply(queries, function(x) {
    x <- gsub("\\s+", "\\+", gsub("[-,]", " ", x))
    out <- try(gtrends(ch, query = x , geo = "US")[["trend"]])
    if (inherits(out, "try-error")) return(NULL)
    out
})