2017-02-03 21 views
-1

Я написал очень быстрый сценарий взрыва в 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 или раз после предпусковой указанное время.

ответ