如果脱机运行,CRAN示例将失败(与外部API对话)

如果脱机运行,CRAN示例将失败(与外部API对话),r,R,我有一个roxygen代码块,其中有一个与外部API对话的示例。看起来像这样 #' @examples #' library(opentriviadb) #' dat <- httr::GET("https://opentdb.com/api_category.php") 有没有什么方法可以跳过脱机运行的示例?我知道你可以用\dontrun{}包装代码,但是如果有更好的选择,CRAN通常不鼓励这样做。有更好的办法解决这个问题吗?是的,有。如果您已经使用了curl软件包

我有一个roxygen代码块,其中有一个与外部API对话的示例。看起来像这样

#' @examples
#' library(opentriviadb)
#' dat <- httr::GET("https://opentdb.com/api_category.php")

有没有什么方法可以跳过脱机运行的示例?我知道你可以用
\dontrun{}
包装代码,但是如果有更好的选择,CRAN通常不鼓励这样做。有更好的办法解决这个问题吗?

是的,有。如果您已经使用了
curl
软件包,您可以依赖它的功能
has\u internet()

我们最近在软件包中使用了它,由于明显的原因,没有连接就无法查询Google。。。考虑到这一点,我意识到我也在自己的实用程序包中实现了自己的测试

这样你就可以复制它了(感谢你的署名):


isConnected是的,有。如果您已经使用了
curl
软件包,您可以依赖它的功能
has\u internet()

我们最近在软件包中使用了它,由于明显的原因,没有连接就无法查询Google。。。考虑到这一点,我意识到我也在自己的实用程序包中实现了自己的测试

这样你就可以复制它了(感谢你的署名):


已断开连接,谢谢你,德克。我将我的roxygen块修改为````.@examples#'library(opentriviadb)#'if(dang::isConnected()){#'当然,如果调用
dang::isConnected())
你依赖于
dang
。另外,也许你应该提出论点
https://opentdb.com
如果无法解决问题,则会出现错误。是的,更改
站点
参数已使事情按预期进行。非常感谢,德克!是的,刚刚测试了依赖项-我将复制带有属性的函数并在重新提交时删除依赖项。谢谢Dirk。我将我的roxygen块修改为`````@examples#'库(opentriviadb)#'if(dang::isConnected()){#'当然,如果调用
dang::isConnected())
你依赖于
dang
。另外,也许你应该提出论点
https://opentdb.com
如果无法解决问题,则会出现错误。是的,更改
站点
参数已使事情按预期进行。非常感谢,德克!是的,刚刚测试了依赖项-我将复制带有属性的函数并在重新提交时删除依赖项。
Error in curl::curl_fetch_memory(url, handle = handle) : 
  Timeout was reached: [opentdb.com] Operation timed out after 10000 milliseconds with 0 out of 0 bytes received
> curl::has_internet() 
[1] TRUE
>
> dang::isConnected()
[1] TRUE
> 
isConnected <- function(site="https://www.google.com") {
    uoc <- function(site) {
        con <- url(site)                # need to assign so that we can close
        open(con)                       # in case of success we have a connection
        close(con)                      # ... so we need to clean up
    }
    suppressWarnings(!inherits(try(uoc(site), silent=TRUE), "try-error"))
}