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

如何修复R语言中‘Error: arguments imply differing number of rows’错误?

问题分析与解决方案

错误根源

  1. API响应结构不一致:部分议员的详情API返回包含嵌套数组(比如任职记录、委员会成员资格),转成data.frame时会生成多行数据,导致每次循环生成的数据框行数/列数不统一,触发行数不匹配错误。
  2. 未累积结果:当前循环只是每次覆盖单个变量,没有把所有请求结果存储起来,完全达不到批量获取数据的目的。
  3. 硬编码循环次数:直接写死531不够灵活,应该用议员ID列表的实际长度来控制循环。

修正后的脚本

install.packages(c("jsonlite", "httr"))
library(jsonlite)
library(httr)

# 第一次请求获取议员列表
url_deputados <- "https://dadosabertos.camara.leg.br/api/v2/deputados?idLegislatura=57&ordem=ASC&ordenarPor=nome"
get_deputados <- GET(url_deputados)
deputados_text <- content(get_deputados, "text")
deputados_json <- fromJSON(deputados_text, flatten = TRUE)
deputados_df <- as.data.frame(deputados_json)
deputados_df <- deputados_df[1:9]

# 准备详情请求的基础配置
url_base <- "https://dadosabertos.camara.leg.br/api/v2/"
url_deputados_path <- "deputados/"
id_list <- deputados_df$dados.id

# 初始化列表存储所有议员详情(列表能容纳不同结构的数据,避免行数不匹配)
deputados_details <- list()

# 循环请求每个议员的详情
for (i in seq_along(id_list)) {
  cat("正在获取第", i, "个议员的详情...\n")
  # 构建请求URL
  request_url <- paste0(url_base, url_deputados_path, id_list[i])
  # 发送请求
  response <- GET(request_url)
  
  # 检查请求是否成功,失败则跳过并记录警告
  if (http_status(response)$category != "Success") {
    warning(paste("ID", id_list[i], "请求失败:", http_status(response)$message))
    deputados_details[[i]] <- NULL
    next
  }
  
  # 解析响应并存入列表
  response_text <- content(response, "text")
  response_json <- fromJSON(response_text, flatten = TRUE)
  deputados_details[[i]] <- as.data.frame(response_json)
}

# 可选:如果需要合并成单个数据框(处理结构不一致的情况需用rbind.fill)
# install.packages("plyr")
# library(plyr)
# deputados_details_df <- plyr::rbind.fill(deputados_details)

核心改进点

  • 用列表存结果:列表可以容纳行数/列数不同的数据框,避免直接合并时的行数不匹配问题。
  • 增加请求校验:处理API请求失败的情况,防止脚本中途中断。
  • 动态控制循环:用seq_along(id_list)替代硬编码的数字,适配实际的议员数量。
  • 灵活合并方案:如果需要统一成单个数据框,用plyr::rbind.fill可以自动填充缺失列,兼容结构不一致的响应。

内容的提问来源于stack exchange,提问作者Gabriel Pace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:50:17