需要仔细编写依赖于对网络资源的访问的包。Web资源可能会改变位置,可能暂时不可用,或者访问和检索的速度非常慢。查询web资源的函数应该预料到并优雅地处理这种情况——当资源在合理的时间范围内不可用时,就会迅速而清晰地失败。一些可以避免的问题出现在Bioconductor包代码包含无限循环,使用一切可用R连接和不清楚的错误消息。
还记得Bioconductor包是跨多个操作系统每晚构建的,用户可以从易于运行的小插图和示例中获益。
下载适当大小的文件。使用system.time ()
估计下载时间。请记住,运行该包所需的时间应该少于5分钟R CMD检查——no-build-vignettes
。
设置函数尝试某个URL的次数限制。避免而()
没有保证终止的声明。这将成为无限循环并最终导致构建系统超时
年代。
提供信息性错误消息。
这个函数可以作为适当的资源检索的模板。它在失败之前尝试检索资源一次或多次,并将其作为参数:
URL
,通常是要查询的资源人物(1)
或url ()
。有趣的
,用于查询资源。的例子可能包括readline ()
,download.file ()
,httr: GET ()
,RCurl: getURL ()
。…
:附加参数有趣的
。N.TRIES
:尝试URL的次数;只有在特殊情况下,这个值才可能与默认值不同。返回值是检索到的资源。如果资源检索失败,该函数指示失败,包括最后一次尝试的条件(错误)消息。警告以正常的方式传播给用户。
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}