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

使用R语言easyPubMed包批量下载PubMed记录异常求助

问题根因

R 4.1.3环境下easyPubMed出现两类异常的核心原因有两点:

  • 2022年后NCBI对PubMed E-utilities接口的返回格式、编码规则做了调整,CRAN上适配R4.1.x的旧版easyPubMed未做对应适配,导致文件写入、内容读取时出现换行识别错误、NA填充问题。
  • 最新版XML依赖包要求R版本≥4.2.0,在R4.1.3环境下安装会出现底层解析逻辑不兼容,无法正常将接口返回的文本转为XML对象。
分步解决方法

1. 修复版本兼容问题

先执行以下操作清理不兼容的包版本:

remove.packages(c("easyPubMed", "XML"))

安装适配R4.1.3的版本:

  • 从CRAN归档库下载XML_3.99-0.11版本源码包,本地执行安装,不要安装最新版XML包。
  • 从CRAN归档库下载easyPubMed_2.13版本源码包,本地执行安装,不要直接安装CRAN当前推送的最新版easyPubMed,该2.13版本已适配NCBI更新后的接口规则。

2. 修正原有代码的参数配置

修复batch_pubmed_download()返回NA问题

原有代码缺少显式格式指定参数,且读取文件时未做编码防护,修正后代码如下:

library(easyPubMed)
new_query <- "(APE1[TI] OR OGG1[TI]) AND (2012[PDAT]:2016[PDAT])"
out.A <- batch_pubmed_download(
  pubmed_query_string = new_query,
  dest_file_prefix = "easyPM_example", 
  batch_size = 150, 
  encoding = "UTF-8",
  format = "xml",
  api_key = NULL
)
# 读取时关闭warn提示,显式指定编码
cat(readLines(out.A[1], encoding = "UTF-8", warn = FALSE)[1:32], sep = "\n")

修复fetch_pubmed_data()返回类型不符问题

原有代码未指定返回格式,且缺少手动解析步骤,修正后代码如下:

my_query <- '"genetic therapy"[MeSH Terms]'
my_entrez_id <- get_pubmed_ids(my_query)
# 显式指定返回格式为xml
my_abstracts_text <- fetch_pubmed_data(my_entrez_id, retmode = "xml")
# 手动调用XML包解析为目标对象
my_abstracts_xml <- XML::xmlParse(my_abstracts_text)
# 校验返回类型
class(my_abstracts_xml)

3. 兜底替代方案

如果上述操作后仍存在异常,可以绕过easyPubMed的封装,直接用rentrez包实现批量下载,逻辑更稳定:

# 安装依赖
install.packages(c("rentrez", "XML"))
library(rentrez)

new_query <- "(APE1[TI] OR OGG1[TI]) AND (2012[PDAT]:2016[PDAT])"
# 获取所有匹配的PMID
all_pmids <- entrez_search(db = "pubmed", term = new_query, retmax = 10000)$id
# 按150条每批拆分
batch_list <- split(all_pmids, ceiling(seq_along(all_pmids)/150))
# 分批拉取并写入本地文件
for(i in seq_along(batch_list)){
  rec_content <- entrez_fetch(db = "pubmed", id = batch_list[[i]], rettype = "xml")
  writeLines(rec_content, con = paste0("easyPM_example_batch", i, ".xml"), useBytes = TRUE)
}

内容的提问来源于stack exchange,提问作者iron captain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:03:32