【发布时间】:2021-09-13 10:32:25
【问题描述】:
这是我试图从这个问题执行的同一任务的延续。 Working with pubmed api in R (httr) to retrieve abstracts
使用下面的答案,我可以找到感兴趣的摘要的公开 ID。
现在,我正在尝试获取这些摘要的标题和全文(作为 2 列数据框,一列用于标题,一列用于摘要文本)。
我从api文档了解到的是可以传递多个ID,所以我尝试了下面的代码。
library(XML)
library(httr)
library(glue)
library(dplyr)
####
####
query = 'asthma[mesh]+AND+leukotrienes[mesh]+AND+2009[pdat]'
reqq = glue ('https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term={query}')
reqq = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=science[journal]+AND+breast+cancer+AND+2008[pdat]&usehistory=y"
op = GET(reqq)
content(op)
df_op <- op %>% xml2::read_xml() %>% xml2::as_list()
pmids <- df_op$eSearchResult$IdList %>% unlist(use.names = FALSE)
上面的代码将pmids作为一个字符获取,然后我尝试将它们传递给efetch
reqq1 = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=pmids&rettype=abstract&retmode=xml"
op1 = GET(reqq1)
content(op1)
我收到一条错误消息:ID 列表为空!可能它没有正确的 ID。
然后我尝试更改 ID 字符串的格式,使它们以逗号分隔,并且中间没有引号或空格。
idc = paste(shQuote(pmids, type = "cmd"), collapse = ", ")
idc = gsub('"', '', idc)
idc = gsub(' ', '', idc)
# Then pass them to the same code:
reqq1 = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=idc&rettype=abstract&retmode=xml"
op1 = GET(reqq1)
content(op1)
但我仍然遇到与上述相同的错误。 我想要实现的是使用这些摘要的数据获取 xml 文件(然后最终将标题和摘要正文提取到数据框中)。 是否可以将所有 ID 传递到一次提取中,或者必须使用循环一个一个地发送这些 ID?如果您能提供一些指导或有一个可行的简短脚本,将不胜感激。
谢谢
【问题讨论】:
标签: r xml pubmed pubmed-api