首页 > 解决方案 > 如何通过提供查询名称列表而不是单个查询名称来使用rentrez 包检索数据?

问题描述

因此,我尝试使用该rentrez软件包从 GenBank 中检索 DNA 序列数据,并提供物种列表作为输入。我所做的是为我要查询的物种创建一个向量,然后创建一个term我指定要检索的序列数据类型的位置,然后创建一个search检索与我的查询匹配的所有事件,最后我创建data我在 fasta 文件中检索实际序列数据的位置。

library(rentrez)

species<-c("Ablennes hians","Centrophryne spinulosa","Doratonotus megalepis","Entomacrodus cadenati","Katsuwonus pelamis","Lutjanus fulgens","Pagellus erythrinus")

for (x in species){
term<-paste(x,"[Organism] AND (((COI[Gene] OR CO1[Gene] OR COXI[Gene] OR COX1[Gene]) AND (500[SLEN]:3000[SLEN])) OR complete genome[All Fields] OR mitochondrial genome[All Fields])",sep='',collapse = NULL)
search<-entrez_search(db="nuccore",term=term,retmax=99999)
data<-entrez_fetch(db="nuccore",id=search$ids,rettype="fasta")
}

基本上我要做的是将每个物种的查询结果连接成一个变量。我开始使用 for 循环,但我认为这种形式没有意义,因为正在查询的每个新物种的数据只是替换data.

对于 的某些元素species,将没有要检索的数据,并且 R 显示此错误:

Error: Vector of IDs to send to NCBI is empty, perhaps entrez_search or entrez_link found no hits?

在显示此错误并因此没有该特定物种的数据的情况下,我希望代码继续运行并忽略它。

我的输出将是一个变量data,其中将包括检索的序列数据,来自species.

标签: rrentrez

解决方案


library(rentrez)

species<-c("Ablennes hians","Centrophryne spinulosa","Doratonotus megalepis","Entomacrodus cadenati","Katsuwonus pelamis","Lutjanus fulgens","Pagellus erythrinus")

data <- list()

for (x in species){
  term<-paste(x,"[Organism] AND (((COI[Gene] OR CO1[Gene] OR COXI[Gene] OR COX1[Gene]) AND (500[SLEN]:3000[SLEN])) OR complete genome[All Fields] OR mitochondrial genome[All Fields])",sep='',collapse = NULL)
  search<-entrez_search(db="nuccore",term=term,retmax=99999)
  data[x] <- tryCatch({entrez_fetch(db="nuccore",id=search$ids,rettype="fasta")},
                      error = function(e){NA})
}

推荐阅读