循环等待 r 中的结果或超时
Loop to wait for result or timeout in r
我在 r 中编写了一个非常快速的 blast 脚本,以启用与 NCBI blast 的接口 API。但是有时,结果 url 需要一段时间才能加载,并且我的脚本会抛出错误,直到 url 准备就绪。有没有一种优雅的方式(即tryCatch选项)来处理错误,直到返回结果或在指定时间后超时?
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 或在预先指定的时间后超时。
我想你可能会发现 this answer about the use of tryCatch useful
关于 'keep trying until timeout' 部分。我想你可以在 this other answer about a tryCatch loop on error
之上工作
希望对您有所帮助。
我在 r 中编写了一个非常快速的 blast 脚本,以启用与 NCBI blast 的接口 API。但是有时,结果 url 需要一段时间才能加载,并且我的脚本会抛出错误,直到 url 准备就绪。有没有一种优雅的方式(即tryCatch选项)来处理错误,直到返回结果或在指定时间后超时?
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 或在预先指定的时间后超时。
我想你可能会发现 this answer about the use of tryCatch useful
关于 'keep trying until timeout' 部分。我想你可以在 this other answer about a tryCatch loop on error
之上工作希望对您有所帮助。