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

如何自动分块批量调用clinicaltrials.gov API获取NCT数据?

解决ClinicalTrials.gov API批量查询的限制问题

问题背景

你有一个仅包含"NCT编号"的单列数据框,示例数据如下:

NCT <- structure(list(`NCT Number` = c("NCT01772004", "NCT02513394", 
"NCT02873195", "NCT01872975", "NCT02750826", "NCT02517398")), row.names = c(NA, 
6L), class = "data.frame")

使用原有代码查询ClinicalTrials.gov API时,小批量数据运行正常,但处理600行数据会触发API请求限制报错,需要实现自动分块循环调用的方案,满足月度重复执行的需求。

解决方案代码

以下是自动分块、循环调用API并合并结果的实现,加入了请求延迟避免触发限制:

library(clinicaltrialr)
library(pbapply)
library(dplyr)

# 设置分块大小(根据API限制调整,比如每次处理20个编号)
chunk_size <- 20
# 将NCT编号拆分为若干分块
nct_chunks <- split(NCT$`NCT Number`, ceiling(seq_along(NCT$`NCT Number`) / chunk_size))

# 初始化空列表存储结果
trials_list <- list()

# 循环处理每个分块
for (i in seq_along(nct_chunks)) {
  cat("正在处理第", i, "/", length(nct_chunks), "个分块...\n")
  # 调用API获取当前分块的研究数据
  chunk_data <- pbapply::pblapply(nct_chunks[[i]], ct_read_trial, cl = 7)
  # 将当前分块结果存入列表
  trials_list[[i]] <- dplyr::bind_rows(chunk_data)
  # 分块间添加延迟,避免触发API频率限制(可根据实际情况调整时长)
  Sys.sleep(10)
}

# 合并所有分块的结果
trials <- dplyr::bind_rows(trials_list)

代码说明

  • 分块设置:chunk_size可根据ClinicalTrials.gov的API限制调整,一般建议单次请求数量不超过50(实际以官方限制为准)
  • 分块拆分:用split()和ceiling(seq_along())将NCT编号列表均匀拆分为多个小分块
  • 循环处理:遍历每个分块调用API,同时打印进度便于监控
  • 请求延迟:Sys.sleep(10)在分块请求间添加10秒延迟,避免短时间内请求过多触发限制,时长可根据实际情况调整
  • 结果合并:最后用bind_rows()将所有分块的结果合并为一个完整数据框

内容的提问来源于stack exchange,提问作者Joe Crozier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:00:18