查询网络资源

需要仔细编写依赖于对网络资源的访问的包。Web资源可能会改变位置,可能暂时不可用,或者访问和检索的速度非常慢。查询web资源的函数应该预料到并优雅地处理这种情况——当资源在合理的时间范围内不可用时,就会迅速而清晰地失败。一些可以避免的问题出现在Bioconductor包代码包含无限循环,使用一切可用R连接和不清楚的错误消息。

指导原则

还记得Bioconductor包是跨多个操作系统每晚构建的,用户可以从易于运行的小插图和示例中获益。

  1. 下载适当大小的文件。使用system.time ()估计下载时间。请记住,运行该包所需的时间应该少于5分钟R CMD检查——no-build-vignettes

  2. 设置函数尝试某个URL的次数限制。避免而()没有保证终止的声明。这将成为无限循环并最终导致构建系统超时年代。

  3. 提供信息性错误消息。

资源查询模板

这个函数可以作为适当的资源检索的模板。它在失败之前尝试检索资源一次或多次,并将其作为参数:

返回值是检索到的资源。如果资源检索失败,该函数指示失败,包括最后一次尝试的条件(错误)消息。警告以正常的方式传播给用户。

getURL <- function(URL, FUN,…),N.TRIES=1L) { N.TRIES <- as.integer(N.TRIES) stopifnot(length(N.TRIES) == 1L, !is.na(N.TRIES)) while (N.TRIES > 0L) { result <- tryCatch(FUN(URL, ...), error=identity) if (!inherits(result, "error")) break N.TRIES <- N.TRIES - 1L } if (N.TRIES == 0L) { stop("'getURL()' failed:", "\n URL: ", URL, "\n error: ", conditionMessage(result)) } result }

基地R函数的使用url ()连接方面getOption(“超时”);看到url ?获取详细信息。

有趣的可能实现来检索资源并测试状态,例如,

response <- httr::GET(URL, timeout(getOption("timeout")),…)stop_for_status(response) response}