使用R语言生成特定区域推文时遇vapply错误求助
问题解决:
search_tweets的location参数报错处理 错误原因
search_tweets函数的location参数不支持传入多个地点的字符向量,它仅接受两种输入:
- 单个地点名称(比如
"Lagos") - 长度为4的经纬度边界向量(格式:
c(西南经度, 西南纬度, 东北经度, 东北纬度))
你传入了长度为6的州名向量,导致内部编码函数vapply处理时出现长度不匹配的错误,也就是你看到的FUN(X[[5]]) result is length 6。
解决方法
方法1:循环遍历每个州,分别抓取推文后合并
通过循环逐个处理每个州,再把结果合并成一个数据框:
token <- create_token(consumer_key = "1234", consumer_secret = "1234", access_token = "1234", access_secret = "1234") states_a <- c("ondo", "ekiti", "ogun", "lagos", "osun", "oyo") unemployment_tweets_list <- list() # 循环遍历每个州 for (state in states_a) { # 每个州单独抓取推文 tweets <- search_tweets(q = "#unemployment", location = state, n = 2000, lang = "en", include_rts = FALSE) # 把结果存入列表 unemployment_tweets_list[[state]] <- tweets } # 合并所有州的推文 unemployment_tweets_a <- dplyr::bind_rows(unemployment_tweets_list)
方法2:使用合并的地理边界(适用于相邻区域)
如果这些州属于同一地理区块(比如尼日利亚西南地区),可以先获取整个区域的经纬度边界,用这个边界作为location参数:
# 假设尼日利亚西南地区的大致边界(可根据实际需求调整) sw_ng <- c(2.6, 6.2, 5.6, 8.5) unemployment_tweets_a <- search_tweets(q = "#unemployment", location = sw_ng, n = 2000, lang = "en", include_rts = FALSE)
注意事项
- Twitter API有请求频率限制,循环抓取时如果出现限流错误,可以添加
Sys.sleep(10)这类延迟语句。 search_tweets的n参数是单次请求的最大推文数,循环时如果需要每个州都抓取2000条,保持当前设置即可;如果是总共2000条,要调整单条请求的数量。
内容的提问来源于stack exchange,提问作者Olufemi
相关产品推荐
相关产品推荐

