如何通过提供查询名称列表而不是单个查询名称来使用 rentrez 包检索数据?

How to retrieve data using the rentrez package by giving a list of query names instead of a single one?

所以我正在尝试使用 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 中的所有名称中检索到的序列数据。

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})
}