我在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])[])
答案 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
})