2015-04-14 5 views
9

Пакет R связывается с коммерческой базой данных, используя приватное имя пользователя и пароль , чтобы установить соединение. В файле package_vignette.Rmd есть фрагмент кода:R-код в виниере пакета не может работать на CRAN по соображениям безопасности. Как управлять такой виньеткой?

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

Я не имею права, чтобы обеспечить фактическое user_name и пароль CRAN, поэтому я не могу поставить подлинный файл «connection.config» с пакет. Итак, конечно, этот фрагмент кода приводит к ошибке во время проверок CRAN.

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

  1. Используйте knitr вариант: eval = FALSE.

  2. static vignette with help of the R.rsp упаковка.

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

+1

включают образцы данных в вашем пакете, например. fetch_sample_all_metrics() с нечувствительными/анонимизированными данными и использовать его в своей виньете –

+0

Вы можете установить все куски на 'eval = F', вызвав' knitr :: opts_chunk $ set (eval = F) 'внутри первого фрагмента. – gregmacfarlane

ответ

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

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 или в вашем файле R_HOME/Rprofile.site. См. help("Startup") для получения информации о более поздней версии.

В качестве альтернативы, вы можете проверить, если "/home/user001/connection.config" существует с

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

в опции куска.