2015-04-14 6 views
9

Un pacchetto R comunica con un database commerciale utilizzando un nome utente e una password privati ​​ per stabilire la connessione. Nel file package_vignette.Rmd c'è un pezzo di codice:Il codice R nella scenografia del pacchetto non può essere eseguito su CRAN per motivi di sicurezza. Come gestire tale vignetta?

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

non ho il diritto di fornire nome_utente reale e la password per CRAN, quindi non posso fornire il file vero e proprio 'connection.config' con il pacchetto. Quindi, naturalmente, questo frammento di codice porta ad Errore durante i controlli CRAN.

Conosco due modi per aggirare il check CRAN:

  1. Utilizzare knitr opzione: eval = FALSE.

  2. Fare il pacchetto static vignette with help of the R.rsp.

Il primo modo è troppo tempo, perché ci sono un sacco di pezzi, e riscrivo/ricostruire la vignetta spesso. Il secondo modo è migliore per me. Ma potrebbe esserci un modello migliore per supportare tale vignetta? Ad esempio, nei test del pacchetto, utilizzo testthat::skip_on_cran() per evitare i controlli CRAN.

+1

include dati di esempio nel pacchetto, ad es. fetch_sample_all_metrics(), con dati non sensibili/resi anonimi, e usarli nella tua vignetta –

+0

Puoi impostare tutti i chunk su 'eval = F' chiamando' knitr :: opts_chunk $ set (eval = F) 'all'interno del primo blocco. – gregmacfarlane

risposta

2

Il modo più semplice è solo includere i dati con il pacchetto. O il set di dati fittizio in:

  • l'elenco data. Ciò consentirebbe agli utenti di accedervi facilmente.
  • o in inst/extdata. Gli utenti possono accedere a questo file, ma è un po 'più nascosto. Si potrebbe trovare la posizione utilizzando system.file(package="my_pkg")

Nella vignetta si avrebbe qualcosa

```{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 controlla solo una variabile di sistema

> testthat::skip_on_cran 
function() 
{ 
    if (identical(Sys.getenv("NOT_CRAN"), "true")) { 
     return(invisible(TRUE)) 
    } 
    skip("On CRAN") 
} 
<environment: namespace:testthat> 

Da quanto ho capito, questo è impostato da testthat o devtools. Così, si potrebbe usare

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

nell'opzione pezzo e caricare testthat o devtools in uno dei primi pezzi. In caso contrario, è possibile utilizzare un meccanismo simile sul sito e assegnare una variabile di sistema simile e verificare se è "true". Ad esempio, utilizzare Sys.setenv("IS_MY_COMP", "true")). Quindi inserisci una chiamata Sys.setenv nel tuo file .Rprofile se utilizzi R studio o nel tuo file R_HOME/Rprofile.site. Vedere help("Startup") per informazioni sull'opzione successiva.

In alternativa, è possibile verificare se esiste "/home/user001/connection.config" con

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

nell'opzione pezzo.

Problemi correlati