Код R в виньетке пакета не может работать на CRAN по соображениям безопасности. Как управлять такой виньеткой?

Пакет R связывается с коммерческой базой данных, используя личное имя пользователя и пароль для установления соединения. В файле 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, поэтому я не могу предоставить подлинный файл connection.config вместе с пакетом. Поэтому, конечно, этот фрагмент кода приводит к ошибке во время проверок CRAN.

Я знаю два способа обойти проверку CRAN:

  1. Используйте опцию knitr: eval = FALSE,

  2. Сделайте статическую виньетку с помощью пакета R.rsp.

Первый способ слишком трудоемкий, потому что там много кусков, и я часто переписываю / перестраиваю виньетку. Второй способ лучше для меня. Но может быть, есть лучшая модель, как поддержать такую ​​виньетку? Например, в тестах пакета я использую testthat::skip_on_cran() чтобы избежать проверок CRAN.

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()
```

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, Таким образом, вы можете использовать

eval = identical(Sys.getenv("NOT_CRAN"), "true")

в варианте чанка и загрузить testthat или же devtools в одном из первых кусков. В противном случае вы можете использовать похожий механизм на вашем сайте, назначить аналогичную системную переменную и проверить, является ли она "true", Например, использовать Sys.setenv("IS_MY_COMP", "true")). Затем положить Sys.setenv позвоните в ваш .Rprofile файл, если вы используете R Studio или в вашем R_HOME/Rprofile.site файл. Увидеть help("Startup") для получения информации о более позднем варианте.

Кроме того, вы можете проверить, если "/home/user001/connection.config" существует с

eval = file.exists("/home/user001/connection.config")

в варианте чанка.

Другие вопросы по тегам