R语言中如何遍历数据框列的所有行批量重复执行代码拉取对应账号时间线
R 批量调用userTimeline实现方法
以下方案基于rtweet包的userTimeline函数、以及你已有的单列Companies数据框场景实现:
推荐方案:结果存入列表(避免零散变量)
这是R语言批量操作的最优实践,不用手动生成tweet1/tweet2这类零散变量,后续数据处理效率更高,也能自动适配任意长度的公司列表。
基础R实现(无需额外安装包)
# 提取数据框中的公司名向量 company_vec <- df$Companies # 批量拉取时间线,结果存入列表 tweet_list <- lapply(company_vec, function(company) { # 拼接@前缀调用接口,可加retryonratelimit = TRUE自动应对接口限频 userTimeline(paste0("@", company), n = 100, retryonratelimit = TRUE) }) # 给列表元素加公司名索引,方便后续单独提取 names(tweet_list) <- company_vec
使用方式:提取单个公司的结果直接用tweet_list[["Optus"]],合并所有结果直接执行do.call(rbind, tweet_list)即可得到全量数据集。
Tidyverse生态实现(使用purrr包)
如果习惯tidyverse语法,写法更简洁:
library(purrr) tweet_list <- map(company_vec, ~ userTimeline(paste0("@", .x), n = 100, retryonratelimit = TRUE)) %>% set_names(company_vec)
特殊需求:强制生成tweet1/tweet2类独立变量
如果确实需要生成按序号命名的独立变量(不推荐,后续批量处理成本高),可以用assign实现:
for (idx in seq_along(company_vec)) { # 生成变量名:tweet1、tweet2、tweet3... var_name <- paste0("tweet", idx) # 给对应变量赋值 assign(var_name, userTimeline(paste0("@", company_vec[idx]), n = 100)) }
注意事项
- 批量调用时务必加
retryonratelimit = TRUE参数,遇到接口限频时会自动等待冷却后继续运行,避免中途报错中断 - 尽量不要用零散变量存储结果,后续做合并、筛选、统计操作时,列表的处理效率远高于逐个独立变量
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

