如何不使用 roxygen2运行示例?

我现在正在编写一个 地理编码功能,它依赖于一个必应地图密钥。显然,我不愿意发表我的例子,而且没有这样的例子就会失败。

我如何包括一个示例,让用户手动运行,而不是在 R CMD check期间执行它?

29165 次浏览

使用 \dontrun{}

#'@examples
#'\dontrun{
#'geocode("3817 Spruce St, Philadelphia, PA 19104")
#'geocode("Philadelphia, PA")
#'dat <- data.frame(value=runif(3),address=c("3817 Spruce St, Philadelphia, PA 19104","Philadelphia, PA","Neverneverland"))
#'geocode(dat)
#'}

Ari,我也使用 roxygen2(版本4.1.0)。下面是函数(gctemplate)定义中的 roxygen2标记的结尾,直到实际部分的开始。

#' @examples
#' ## List all G-causalities in a VAR system of 5 variables that will be searched in the pattern of 1
#' ## causer (like-independent) variable and 2 like-dependents conditional on 5-(1+2)=2 of the remaining
#' ## variable(s) in the system. Variables are assigned to numbers 1 to nvars.
#' ## "1 2 5 3 4" in the resulting line of gctemplate is to indicate the
#' ## (conditonal, partial, etc.) G-causality from variable 1 to variables 2 and 5
#' ## conditonal on variables 3 and 4.
#' # gctemplate(5,1,2)
#' ## The number of all G-causalities to be searched in the above pattern.
#' #dim(gctemplate(5,1,2))[[1]]
#' @importFrom combinat combn
#' @export
gctemplate <- function(nvars, ncausers, ndependents){
...

我知道 GSee 的逃跑方法。
在我的技术中,数值例子和解释数值例子的文本都是注释。我使用缩进来区分这两个,注意在“ #”后面分别有1个和2个锐角。我总是在包中使用上面的“ #’# #/#”技巧。只要用户想测试函数,就可以进行复制粘贴操作。根据我的看法,这种技术与软件编码哲学中的经典注释轰炸更为相似。

对于那些使用 @example path/to/example.R而不是 @examples标记的用户,您可以直接在 example.R文件中使用 \dontrun环境。比如说

# example.R
\dontrun{
# this is a long running example
for(i in seq(1, 1e5)) { lm(mpg ~ wt, data = mtcars) }
}


# some other shorter example
2 + 2

您可以在示例中使用 \donttest{}。文档中将提供这个代码片段,但是不会使用 RCMD 检查进行测试。

For more info --> ?example

#' @example
\donttest{
2^2
}

当您运行 devtools::check()时,这个2 ^ 2不会被运行


剪辑

根据 R4.0的最新版本说明或 新闻,现在将默认测试 \donttest{}中的示例。但是,这可以通过将环境变量 _R_CHECK_DONTTEST_EXAMPLES_设置为 FALSE来覆盖。

R CMD check --as-cran now runs \donttest examples (which are run by example()) instead of instructing the tester to do so. This can be temporarily circumvented during development by setting environment variable R _ CHECK _ DONTTEST _ EXAMPLES to a false value.

According to 这个 GitHub issues discussion (credited 给你), Hadley Wickham noted that

通常,现在如果您不想在 CRAN dontrun {}上运行测试,那么使用 dontrun {}可能会导致初始提交失败。

还有其他方法可以让您继续使用 donttest{},请参考前面的讨论以获得解决方案。

\dontrun{}

是正确的函数,请看这里:

为了便于说明,包含导致错误的代码通常很有用。Dontrun {}允许在示例中包含未运行的代码。(您过去可以使用 donttest {}来实现类似的目的,但是不再推荐使用它,因为它实际上已经被测试过了。)

资料来源: https://r-pkgs.org/man.html?q=donttest#man-functions