出于安全原因,程序包插图中的R代码无法在CRAN上运行。如何管理这样的小插图?

时间:2015-04-14 15:20:44

标签: r cran vignette r-package

R包使用私有与商业数据库通信 用于建立连接的user_name和密码。 在package_vignette.Rmd文件中有一大块代码:

```{r, eval = TRUE}
# set user_name and password from user's configuration file
set_connection(file = "/home/user001/connection.config")

# ask data base for all metrics it has
my_data <- get_all_metrics()

# display names of fetched metrics
head(my_data$name)
```

我无权向CRAN提供实际的用户名和密码, 所以我无法提供真正的&#39; connection.config&#39;包含文件。 因此,当然,此代码片段在CRAN检查期间会导致错误。

我知道两种方法来解决CRAN检查:

  1. 使用knitr选项:eval = FALSE

  2. 制作static vignette with help of the R.rsp包。

  3. 第一种方式太耗时,因为有很多块, 我经常重写/重建小插图。 第二种方式对我来说更好。但可能有更好的模式如何支持这样的小插曲?例如,在软件包的测试中,我使用testthat::skip_on_cran()来避免CRAN检查。

2 个答案:

答案 0 :(得分:2)

最简单的方法就是将数据包含在您的包中。要么设置虚拟数据:

  • data目录。这将允许用户轻松访问它。
  • inst/extdata。用户可以访问此文件,但它更隐蔽。您可以使用system.file(package="my_pkg")
  • 找到该位置

在小插图中你会有一些东西

```{r, echo=FALSE}
data(example_data, package="my_pkg")
my_data = example_data
```

```{r, eval = FALSE}
# set user_name and password from user's configuration file
set_connection(file = "/home/user001/connection.config")

# ask data base for all metrics it has
my_data <- get_all_metrics()
```

答案 1 :(得分:1)

deleted = 0只检查系统变量

testthat::skip_on_cran

根据我的收集,这是由> testthat::skip_on_cran function () { if (identical(Sys.getenv("NOT_CRAN"), "true")) { return(invisible(TRUE)) } skip("On CRAN") } <environment: namespace:testthat> testthat设置的。因此,您可以使用

devtools
在chunk选项中

并在其中一个第一个块中加载eval = identical(Sys.getenv("NOT_CRAN"), "true") testthat。否则,您可以在站点上使用类似的机制并分配类似的系统变量并检查它是否为devtools。例如,使用"true")。如果您使用R studio或Sys.setenv("IS_MY_COMP", "true")文件,请在Sys.setenv文件中添加.Rprofile电话。有关后一选项的信息,请参阅R_HOME/Rprofile.site

或者,您可以使用

检查help("Startup")是否存在
"/home/user001/connection.config"

在块选项中。