如何在R中调用NIH的findDrugInteractions API并处理返回JSON
在R中调用NIH findDrugInteractions API并格式化结果
1. 基础API调用实现
用httr发送GET请求,结合目标rxcui构造请求URL,再通过jsonlite解析返回的JSON数据:
library(httr) library(jsonlite) # 目标药物的rxcui编码 target_rxcui <- "88014" # 构造API请求URL api_url <- paste0("https://lhncbc.nlm.nih.gov/RxNav/interaction/list.json?rxcui=", target_rxcui) # 发送请求并解析JSON response <- GET(api_url) interactions_raw <- fromJSON(content(response, "text"), simplifyVector = FALSE)
2. 提取关键药物相互作用信息
API返回的JSON嵌套层级深,直接用rrapply会生成冗余列,针对性提取核心字段可得到简洁的数据框:
# 定位交互组数据节点 interaction_groups <- interactions_raw$fullInteractionTypeGroup # 初始化结果存储列表 formatted_interactions <- list() # 遍历嵌套结构提取核心信息 for (group in interaction_groups) { for (interaction_type in group$fullInteractionType) { # 获取当前目标药物名称 target_drug <- interaction_type$minConcept[1]$name # 遍历每一组药物配对交互 for (pair in interaction_type$interactionPair) { interacting_drug <- pair$minConceptItem$name severity <- pair$severity interaction_details <- pair$interactionDescription # 存入列表 formatted_interactions <- append(formatted_interactions, list( data.frame( target_drug = target_drug, interacting_drug = interacting_drug, severity = severity, interaction_details = interaction_details, stringsAsFactors = FALSE ) )) } } } # 合并为最终结构化数据框 final_df <- do.call(rbind, formatted_interactions)
3. 数据框优化说明
- 上述代码只提取目标药物、相互作用药物、严重程度、交互描述四个核心列,避免了
rrapply拆解所有嵌套字段导致的冗余数据 - 若需补充rxcui编码、来源等额外字段,可在遍历过程中从对应JSON节点提取(比如
pair$minConceptItem$rxcui)
内容的提问来源于stack exchange,提问作者user007
相关产品推荐
相关产品推荐

