-1

我在 GTrendsR 包上遇到了一个错误,StackOverflow 上的其他示例没有处理,这就是如何使用 for 或 lapply 功能循环多个搜索。

当我做某事像 gtrends(ch, query = "Harvard University" , 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 链接上)

我在使用 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循环自动化:

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])[])
4

1 回答 1

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
})
于 2014-11-20T15:34:57.400 回答