2015-04-14 3 views
9

Ein R-Paket kommuniziert mit einer kommerziellen Datenbank unter Verwendung eines privaten Benutzernamens und Kennworts, um eine Verbindung herzustellen. In der package_vignette.Rmd Datei gibt es ein Stück Code:Der R-Code in der Paketvignette kann aus Sicherheitsgründen nicht auf CRAN ausgeführt werden. Wie man eine solche Vignette verwaltet?

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

I tatsächliche user_name und ein Passwort CRAN nicht die Rechte haben zu bieten, so kann ich echt ‚connection.config‘ Datei nicht liefern mit das Paket. Natürlich führt dieses Codefragment bei CRAN-Prüfungen zu einem Fehler.

Ich kenne zwei Möglichkeiten, um CRAN Kontrolle zu bekommen:

  1. Verwenden knitr Option: eval = FALSE.

  2. Machen Sie static vignette with help of the R.rsp Paket.

Der erste Weg ist zu zeitaufwendig, weil es eine Menge Stücke ist, und ich umschreiben/die Vignette oft wieder aufzubauen. Der zweite Weg ist besser für mich. Aber gibt es ein besseres Muster, wie man solche Vignette unterstützt? Zum Beispiel verwende ich in den Tests des Pakets testthat::skip_on_cran(), um CRAN-Prüfungen zu vermeiden.

+1

enthalten Beispieldaten in Ihrem Paket, z. fetch_sample_all_metrics(), mit nicht sensiblen/anonymisierten Daten, und verwenden Sie es in Ihrer Vignette –

+0

Sie können alle Chunks auf 'eval = F' setzen, indem Sie' knitr :: opts_chunk $ set (eval = F) 'innerhalb des ersten Chunks aufrufen. – gregmacfarlane

Antwort

2

Der einfachste Weg ist, einfach die Daten in Ihr Paket aufzunehmen. Entweder der Dummy-Datensatz in:

  • das Verzeichnis data. Dies würde es Benutzern ermöglichen, einfach darauf zuzugreifen.
  • oder in inst/extdata. Benutzer können auf diese Datei zugreifen, aber sie ist etwas versteckter. Sie würden den Standort finden system.file(package="my_pkg")

In der Vignette mit würden Sie etwas

```{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 nur überprüft eine Systemvariable

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

Von dem, was ich sammeln, diese wird durch testthat oder devtools eingestellt. So könnte man

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

im Chunk-Option verwenden und testthat oder devtools in einer der ersten Stücke laden. Andernfalls können Sie einen ähnlichen Mechanismus auf Ihrer Site verwenden und eine ähnliche Systemvariable zuweisen und prüfen, ob sie "true" ist. ZB verwenden Sie Sys.setenv("IS_MY_COMP", "true")). Dann setzen Sie einen Sys.setenv Anruf in Ihre .Rprofile Datei, wenn Sie R Studio oder in Ihrer R_HOME/Rprofile.site Datei verwenden. Informationen zur späteren Option finden Sie unter help("Startup").

Alternativ können Sie überprüfen, ob "/home/user001/connection.config" mit

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

in der Option Chunk vorhanden ist.

Verwandte Themen