r - 如何使用 R 搜索 PubMed 或其他数据库

标签 r pubmed doi ropensci

我最近一直在使用优秀的rplos package ,这使得搜索公共(public)科学图书馆 (PLOS) API 上托管的论文变得非常容易。我遇到了一个障碍,因为 API 本身似乎缺少一些信息 - 其中一个主要问题是至少有 2012 篇关于 API 的论文在“期刊”字段中没有任何信息。我有每篇论文的 DOI,因此很容易通过 Google 搜索 DOI 并显示这些是在真实期刊(通常是 PLoS ONE)上发表的真实论文。显然,这样做 2000 次是愚蠢的。

我想知道是否有人知道如何找到来源期刊,如果我有 DOI 列表?我查看了RISmed package ,它显然可以从 R 中搜索 PubMed,但我无法弄清楚如何让它提供有用的信息(只是搜索命中的数量,以及一些可能导致我想要的信息的 PubMed ID)。

有人知道如何将 DOI 列表转换为来源期刊名称吗?

编辑:我只是想到了另一个简单的解决方案。 DOI 包含期刊名称的缩写,对于像这样只有少数期刊的情况,只需使用正则表达式来读取 DOI 并选择它们来自哪个期刊。示例:10.1371/journal.pone.0046711 来自 PLoS ONE。

最佳答案

这是基于 Thomas 建议尝试 rpubmed 的答案。它从有问题的 DOI 列表开始,使用 RISmed 中的 EUtilsSummary 函数查找匹配的 PubMed ID 号,然后使用从 Github for rpubmed 修改并在下面复制的代码获取与这些数据相关的期刊数据。抱歉编辑 rpubmed 代码,但第 44 行的对象似乎没有定义或必不可少,所以我把它们删除了。

library(RCurl); library(XML); library(RISmed); library(multicore)

# dummy list of 5 DOIs. I actually have 2012, hence all the multicoring below
dois <- c("10.1371/journal.pone.0046711", "10.1371/journal.pone.0046681", "10.1371/journal.pone.0046643", "10.1371/journal.pone.0041465", "10.1371/journal.pone.0044562")

# Get the PubMed IDs
res <- mclapply(1:length(dois), function(x) EUtilsSummary(dois[x]))
ids<-sapply(res,QueryId)


######## rpubmed functions from https://github.com/rOpenHealth/rpubmed/blob/master/R/rpubmed_fetch.R
fetch_in_chunks <- function(ids, chunk_size = 500, delay = 0, ...){
  Sys.sleep(delay * 3600) # Wait for appropriate time for the server.
  chunks <- chunker(ids, chunk_size)
  Reduce(append, lapply(chunks, function(x) pubmed_fetch(x, ...)))
}

pubmed_fetch <- function(ids, file_format = "xml", as_r_object = TRUE, ...){

  args <- c(id = paste(ids, collapse = ","), db = "pubmed", rettype = file_format, ...)

  url_args <- paste(paste(names(args), args, sep="="), collapse = "&")
  base_url <- "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?retmode=full"
  url_string <- paste(base_url, url_args, sep = "&")
  records <- getURL(url_string)
  #NCBI limits requests to three per second
  Sys.sleep(0.33)
  if(as_r_object){
    return(xmlToList(xmlTreeParse(records, useInternalNodes = TRUE)))
  } else return(records)
}

chunker <- function(v, chunk_size){
  split(v, ceiling(seq_along(v)/chunk_size))
}
###### End of rpubmed functions

d<-fetch_in_chunks(ids)
j<-character(0)
for(i in 1:2012) j[i]<-as.character(d[[i]][[1]][[5]][[1]][[3]]) # the tortuous path to the journal name

关于r - 如何使用 R 搜索 PubMed 或其他数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266705/

相关文章:

r - 计算R中列表的每个父节点下的xmlchildren数量

xml - Perl:从 XML 输出填充数组(通过 Eutils 的 PubMed UID)

r - 使用 R 从 Pubmed 数据中的隶属关系中提取大学名称

r - 在ggplot2中突出显示特定x范围内的区域

r - 如何从 netcdf 文件中可视化 map ?

r - 交互式图表中的订单栏

r - 使用 dplyr 将开始和结束日期扩展到不平衡的月度面板

ruby - 通过从 matlab : translation from ruby 发送 DOI 从 crossref 检索 bibtex 数据

full-text-search - 给定DOI或标题,从科学文献中提取摘要/全文