R语言中如何将paste0输出作为httr包GET函数的请求地址
解决方法
你对GET函数的参数要求存在误解:GET只要求传入字符串类型的URL值,不是必须传入写死在引号里的字符串字面量。paste0的输出本身就是字符串,你不需要给它额外套一层引号,直接作为参数传入GET即可,完全不会有引号冲突问题。
# 直接将paste0整体作为GET的入参即可 test <- GET( 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=", mDPB11cd.donor ) )
你之前写法出错是因为把paste0函数写在了引号内部,R会把引号里的内容识别为普通文本,不会执行函数逻辑,同时嵌套的双引号也不符合R的语法规则。
Tibble批量查询方案
如果需要对tibble的每一行发起查询,推荐用dplyr+purrr的行遍历方式批量处理,方便统一管理请求和返回结果:
library(httr) library(dplyr) library(purrr) # 假设你的原始数据框名为hla_df hla_df <- hla_df %>% rowwise() %>% mutate( # 生成每行对应的请求URL req_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=", mDPB11cd.donor ), # 发起请求,返回结果用列表存储避免列长度异常,Sys.sleep加延迟避免被封IP resp = list({ Sys.sleep(1) GET(req_url) }) ) %>% ungroup()
内容的提问来源于stack exchange,提问作者Nick Brown
相关产品推荐
相关产品推荐

