You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中通过循环从API拉取所有ID数据至数据框的问题

解决API循环拉取仅保留最后一个ID数据的问题

你的问题根源在于每次循环都直接将结果赋值给table变量,上一次循环的结果会被下一次完全覆盖,所以最终只剩最后一个ID的数据。要批量拉取并合并所有ID的数据,你需要先收集每个ID的结果,再统一合并,具体修改方案如下:

修改后的代码(带基础错误处理,适配批量ID场景)

library(httr)
library(jsonlite)
library(dplyr) # 用bind_rows合并更高效,也可以用基础R的do.call(rbind, ...)

ids <- c("101", "252", "595")

# 初始化空列表,用来存储每个ID返回的数据框
result_list <- list()

for(i in seq_along(ids)){
  current_id <- ids[i]
  url <- paste0("example/api/url/", current_id, "/")
  
  api_response <- GET(url)
  
  # 先检查请求是否成功,避免单个ID失败导致整个循环中断
  if(api_response$status_code == 200){
    response_content <- fromJSON(rawToChar(api_response$content))
    df <- as.data.frame(response_content$data)
    result_list[[i]] <- df
  } else {
    # 打印警告,记录失败的ID
    warning(paste("请求ID", current_id, "失败,状态码:", api_response$status_code))
    result_list[[i]] <- NULL
  }
}

# 将列表中的所有数据框合并成一个大的数据框
final_df <- bind_rows(result_list)
# 基础R替代方案:final_df <- do.call(rbind, Filter(Negate(is.null), result_list))

View(final_df)

关键修改点说明

  1. 用列表收集结果:初始化空列表result_list,每次循环把当前ID的数据框存入列表的对应位置,避免数据被覆盖。
  2. 添加错误处理:针对400个ID的批量场景,加入状态码检查,某个ID请求失败时仅抛出警告,不会中断整个循环,同时跳过无效结果。
  3. 统一合并数据:循环结束后用bind_rows(推荐,处理不同列结构更灵活)或do.call(rbind, ...)把所有数据框合并成一个大的结果数据框。

内容的提问来源于stack exchange,提问作者David Boskett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 02:05:11