2015-04-14 26 views
9

Pakiet R komunikuje się z komercyjną bazą danych przy użyciu prywatnej nazwa_użytkownika i hasło w celu nawiązania połączenia. W pliku package_vignette.Rmd znajduje się fragment kodu:Kod R w winietowaniu pakietów nie może być uruchomiony na CRAN ze względów bezpieczeństwa. Jak zarządzać taką winietą?

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

nie mam prawa, aby zapewnić rzeczywistą nazwa_użytkownika i hasło do CRAN, więc nie może dostarczyć prawdziwej „connection.config” plik z paczka. Tak więc, ten fragment kodu prowadzi do błędu podczas sprawdzania CRAN.

Znam dwa sposoby, aby ominąć czeku CRAN:

  1. Wpisz knitr opcja: eval = FALSE.

  2. Wykonaj pakiet static vignette with help of the R.rsp.

Pierwszym sposobem jest zbyt czasochłonne, ponieważ istnieje wiele kawałków, i przepisać/odbudować winietę często. Drugi sposób jest dla mnie lepszy. Ale może być lepszy wzór na poparcie takiej winiety? Na przykład w testach pakietu używam testthat::skip_on_cran(), aby uniknąć sprawdzeń CRAN.

+1

obejmują przykładowe dane w pakiecie, np. fetch_sample_all_metrics(), z niewrażliwymi/anonimowymi danymi, i użyj go w swojej winietce –

+0

Możesz ustawić wszystkie porcje na 'eval = F' przez wywołanie' knitr :: opts_chunk $ set (eval = F) 'wewnątrz pierwszej porcji. – gregmacfarlane

Odpowiedz

2

Najprostszym sposobem jest dodanie danych do paczki. Dowolny zestaw danych w:

  • katalogu data. Umożliwiłoby to użytkownikom łatwy dostęp do nich.
  • lub w inst/extdata. Użytkownicy mogą uzyskać dostęp do tego pliku, ale jest on bardziej ukryty. będzie można znaleźć lokalizację przy użyciu system.file(package="my_pkg")

W winiet byś coś

```{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 prostu sprawdza zmienną systemową

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

Z czego wnoszę, to jest ustawiane przez testthat lub devtools. Tak więc, można użyć

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

w opcji bryłkach i załadować testthat lub devtools w jednym z pierwszych kawałków. W przeciwnym razie możesz użyć podobnego mechanizmu w swojej witrynie i przypisać podobną zmienną systemową i sprawdzić, czy jest to "true". Np. Użyj Sys.setenv("IS_MY_COMP", "true")). Następnie należy wykonać wywołanie Sys.setenv w pliku .Rprofile, jeśli używasz programu R Studio lub pliku R_HOME/Rprofile.site. Zobacz help("Startup"), aby uzyskać informacje na temat późniejszej opcji.

Alternatywnie, można sprawdzić, czy istnieje "/home/user001/connection.config" z

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

w opcji bryłkach.

Powiązane problemy