我正在尝试使用函数 entrez_fetch (rentrez pkg) 从 NCBI 的核苷酸数据库中下载大量 fasta 文件。我正在使用 lapply 发出多个请求,每个请求的起点(retstart)都比最后一个请求高,这样我最终可以获取与我之前的搜索匹配的所有记录:
term <- seq(from = 0, to = 10000, by = 500)
fetch_apply <- lapply(term, function(x)
entrez_fetch(
db = "nuccore",
web_history = search$web_history,
rettype = "fasta",
retstart = paste0(x),
retmax = 500))
print(fetch_apply)
这给了我这个错误信息:
Error in entrez_check(response) : HTTP failure: 502, bad gateway. This error code is often returned when trying to download many records in a single request. Try using web history as described in the rentrez tutorial
所以我的问题是 NCBI 对每秒发出的请求数量有限制(他们建议最多 3 个),我无法更改我的代码以满足此要求。我尝试使用 Sys.sleep 如下:
term <- seq(from = 0, to = 10000, by = 500
fetch_apply <- lapply(term, function(x)
entrez_fetch(
db = "nuccore",
web_history = search$web_history,
rettype = "fasta",
retstart = paste0(x),
retmax = 500))
Sys.sleep(0.4)
print(fetch_apply)
但这也不起作用。我收到与上述相同的错误,但正如您在我的代码中看到的那样,我正在使用网络历史记录。
有一次,我让这段代码最多可以处理 1000 条记录,但它并没有像这里写的那样工作(试图拉 10000 条记录)。这些都只是测试数据,我实际上需要代码以 500 条记录增量处理 390 000 多条记录(电子实用程序文档建议这样做)。
有什么想法吗?我尝试将 Sys.sleep() 提高到 7 秒,但我仍然收到错误消息。