Код 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:
Используйте опцию knitr:
eval = FALSE
,Сделайте статическую виньетку с помощью пакета 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")
в варианте чанка.