Ich habe ein sehr schnelles Blast-Skript in r geschrieben, um die Anbindung an die NCBI-Blast-API zu ermöglichen. Manchmal dauert es jedoch einige Zeit, bis die Ergebnis-URL geladen wird, und mein Skript gibt einen Fehler aus, bis die URL bereit ist. Gibt es einen eleganten Weg (d. H. Eine tryCatch-Option), um den Fehler zu behandeln, bis das Ergebnis zurückgegeben wird oder nach einer bestimmten Zeit abgelaufen ist?Schleife zum Warten auf Ergebnis oder Timeout in 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
Manchmal dauert es mehrere Minuten, bis die get_url
leben so zu gehen, was Ich mag würde, ist zu tun, zu halten versuchen, die alle 20-30 Sekunden sagen lassen, bis sie entweder die URL oder wird nach einem prä- produziert angegebene Zeit.
Nur was ich brauche, danke. – biomiha