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

R中对数据框多行使用httr请求后如何用content解析响应结果

问题原因

httr::content() 仅支持处理单个response类型对象,你数据框中的result列是存储多个response对象的列表列,无法直接传入content()解析,需要通过purrr::map遍历列表中的每个响应对象执行解析操作。

解决方法

你可以在现有代码基础上继续对result列做映射处理,正确写法如下:

library(tidyverse)
library(httr)

DPB1_permisive <- test %>% 
  mutate(
    url = paste0(
      "https://www.ebi.ac.uk/cgi-bin/ipd/imgt/hla/dpb_v2.cgi?pid=1&patdpb1=", 
      mDPB11cd.recipient, 
      "&patdpb2=", mDPB12cd.recipient, 
      "&did=2&dondpb1=", mDPB11cd.donor, 
      "&dondpb2=", mDPB12cd.donor
    ),
    result = map(url, GET),
    # 新增本行解析每个响应的文本内容
    response_text = map_chr(result, ~content(.x, as = "text"))
  )

优化建议

你也可以把请求和解析合并为一步,不需要额外存储response对象占用内存,还可以加入简单的异常处理避免单个请求失败导致整个流程中断:

get_response_text <- function(url) {
  tryCatch(
    {
      GET(url) %>% content(as = "text")
    },
    error = function(e) {
      # 请求失败时返回NA或者自定义错误信息
      return(NA_character_)
    }
  )
}

DPB1_permisive <- test %>% 
  mutate(
    url = paste0(
      "https://www.ebi.ac.uk/cgi-bin/ipd/imgt/hla/dpb_v2.cgi?pid=1&patdpb1=", 
      mDPB11cd.recipient, 
      "&patdpb2=", mDPB12cd.recipient, 
      "&did=2&dondpb1=", mDPB11cd.donor, 
      "&dondpb2=", mDPB12cd.donor
    ),
    response_text = map_chr(url, get_response_text)
  )

内容的提问来源于stack exchange,提问作者Nick Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:15:04