我正在尝试使用rtweet
从Twitter下载记录。这方面的一个问题是Twitter服务器需要每18000条记录等待15分钟。因此,在记录号码18000之后,我收到一个包含所有记录的数据框,并且有一个很好的警告告诉我等一下。 search_tweets
有一个函数参数,用于下载超过18000个名为retryonratelimit
的记录。但是,这不起作用,所以我正在探索其他选择。
我制作了一个功能,合并tryCatch
来解决这个问题。但是,当弹出18000条记录的警告时,tryCatch会保存警告而不是应该在警告之前吐出的数据框。如果下载了17999条记录就不会做的事情
library(rtweet)
library(RDCOMClient)
library(profvis)
TwitScrape = function(SearchTerm){
ReturnDF = tryCatch({
TempList=NULL
Temp = search_tweets(SearchTerm,n=18000)
TempList = list(as.data.frame(Temp), SearchTerm)
return(TempList)
},
warning = function(TempList){
Comb=NULL
MAXID = min(TempList[[1]]$status_id)
message("Delay for 15 minutes to accommodate server download limits")
pause(901)
TempWarn = search_tweets(TempList[[2]],n=18000, max_id=MAXID)
TempWarn = as.data.frame(TempWarn)
Comb = rbind(TempList[[1]], TempWarn)
CombList = list(Comb, TempList[[2]])
return(CombList)
}
)
}
Searches = c("#MUFC","#LFC", "#MCFC")
TestExpandList=NULL
TestExpand=NULL
TestExpand2=NULL
for (i in seq_along(Searches)){
TestExpandList = TwitScrape(SearchTerm = Searches[i])
TestExpand = TestExpandList[[1]]
TestExpand$Cat = Searches[i]
TestExpand$DownloadDate = Sys.Date()
TestExpand2 = rbind(TestExpand2, TestExpand)
}
我希望这是有道理的。如果我能提供更多信息,请告诉我。总之,为什么tryCatch
保存我的警告而不是我想要的数据框?
答案 0 :(得分:0)
我不是100%肯定你想要实现的目标,但似乎你使用tryCatch
时理解错误。
警告处理程序warning = function(TempList)
中的参数是警告本身,即您将其命名为TempList
,但这并不意味着它将成为您的TempList
变量,它将仍然只是将warning
传递给处理程序。
您的函数TwitScrape
按惯例返回ReturnDF
,因为您没有正确返回任何内容,我想这仍然是您想要的并且没问题。
我会尝试在没有tryCatch
答案 1 :(得分:0)
感谢您的评论。 RolandASc,你是对的。我回到了绘图板。请参阅下面的工作TwitScrape功能:
TwitScrape = function(SearchTerm){
DF=NULL
DF = search_tweets(SearchTerm,n=18001)
Warn = warnings()
if (names(Warn[1]) == "Rate limit exceeded - 88"){
message("paused")
pause(910)
DF2 = search_tweets(SearchTerm,n=18000, max_id = min(DF$status_id))
DF3 = rbind(DF, DF2)
return(DF3)
}
else {
return(DF)
}}