Я написал очень быстрый сценарий взрыва в r, чтобы обеспечить взаимодействие с API-интерфейсом NCBI. Иногда, однако, URL-адрес результата занимает некоторое время, и мой скрипт выдает ошибку, пока URL-адрес не будет готов. Есть ли элегантный способ (т. Е. Параметр tryCatch) для обработки ошибки до тех пор, пока результат не будет возвращен или не будет превышен через определенное время?Петля ждать результата или таймаута в r
library(rvest)
## Definitive set of blast API instructions can be found here: https://www.ncbi.nlm.nih.gov/staff/tao/URLAPI/new/BLAST_URLAPI.html
## Generate query URL
query_url <-
function(QUERY,
PROGRAM = "blastp",
DATABASE = "nr",
...) {
put_url_stem <-
'https://www.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Put'
arguments = list(...)
paste0(
put_url_stem,
"&QUERY=",
QUERY,
"&PROGRAM=",
PROGRAM,
"&DATABASE=",
DATABASE,
arguments
)
}
blast_url <- query_url(QUERY = "NP_001117.2") ## test query
blast_session <- html_session(blast_url) ## create session
blast_form <- html_form(blast_session)[[1]] ## pull form from session
RID <- blast_form$fields$RID$value ## extract RID identifier
get_url <- function(RID, ...) {
get_url_stem <-
"https://www.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Get"
arguments = list(...)
paste0(get_url_stem, "&RID=", RID, "&FORMAT_TYPE=XML", arguments)
}
hits_xml <- read_xml(get_url(RID)) ## this is the sticky part
Иногда это занимает несколько минут для get_url
идти жить так, что я хотел бы это сделать, это продолжать попытки, скажем, каждые 20-30 секунд, пока он либо не производит URL или раз после предпусковой указанное время.
Просто то, что мне нужно, спасибо. – biomiha