R Language
Creare pacchetti con devtools
Ricerca…
introduzione
Questo argomento riguarderà la creazione di pacchetti R da zero con il pacchetto devtools.
Osservazioni
Creazione e distribuzione di pacchetti
Questa è una guida compatta su come creare rapidamente un pacchetto R dal tuo codice. Documentazioni esaustive saranno collegate quando disponibili e dovrebbero essere lette se si desidera una conoscenza più approfondita della situazione. Vedi Note per maggiori risorse.
La directory in cui si trova il codice verrà indicata come ./ , e tutti i comandi devono essere eseguiti da un prompt R in questa cartella.
Creazione della documentazione
La documentazione per il tuo codice deve essere in un formato molto simile a LaTeX.
Tuttavia, useremo uno strumento chiamato roxygen per semplificare il processo:
install.packages("devtools")
library("devtools")
install.packages("roxygen2")
library("roxygen2")
La pagina man completa per roxygen è disponibile qui . È molto simile a doxygen .
Ecco un esempio pratico su come documentare una funzione con roxygen :
#' Increment a variable.
#'
#' Note that the behavior of this function
#' is undefined if `x` is not of class `numeric`.
#'
#' @export
#' @author another guy
#' @name Increment Function
#' @title increment
#'
#' @param x Variable to increment
#' @return `x` incremented of 1
#'
#' @seealso `other_function`
#'
#' @examples
#' increment(3)
#' > 4
increment <- function(x) {
return (x+1)
}
Si consiglia inoltre di creare una vignetta (vedere l'argomento Creazione di vignette ), che è una guida completa sul pacchetto.
Costruzione dello scheletro del pacchetto
Supponendo che il tuo codice sia scritto ad esempio nei file ./script1.R e ./script2.R , lancia il seguente comando per creare l'albero dei file del tuo pacchetto:
package.skeleton(name="MyPackage", code_files=c("script1.R","script2.R"))
Quindi elimina tutti i file in ./MyPackage/man/ . Devi ora compilare la documentazione:
roxygenize("MyPackage")
Dovresti anche generare un manuale di riferimento dalla tua documentazione usando R CMD Rd2pdf MyPackage da un prompt dei comandi avviato in ./ .
Edizione delle proprietà del pacchetto
1. Descrizione del pacchetto
Modifica ./MyPackage/DESCRIPTION base alle tue esigenze. I campi Package , Version , License , Description , Title , Author e Maintainer sono obbligatori, mentre gli altri sono facoltativi.
Se il pacchetto dipende da altri pacchetti, specificarli in un campo denominato Depends (versione R <3.2.0) o Imports (versione R> 3.2.0).
2. Cartelle opzionali
Una volta che hai lanciato la build scheletro, ./MyPackage/ solo R/ e man/ sottocartelle. Tuttavia, può avere altri:
-
data/: qui puoi inserire i dati di cui la tua biblioteca ha bisogno e che non è un codice. Deve essere salvato come set di dati con l'estensione.RData, ed è possibile caricarlo in runtime condata()eload() -
tests/: tutti i file di codice in questa cartella verrannotests/al momento dell'installazione. Se c'è qualche errore, l'installazione fallirà. -
src/: per i file sorgente C / C ++ / Fortran necessari (usandoRcpp...). -
exec/: per altri eseguibili. -
misc/: per quasi tutto il resto.
Finalizzazione e costruzione
Puoi eliminare ./MyPackage/Read-and-delete-me .
Come ora, il tuo pacchetto è pronto per essere installato.
Puoi installarlo con devtools::install("MyPackage") .
Per creare il tuo pacchetto come tarball sorgente, devi eseguire il seguente comando, da un prompt dei comandi in ./ : R CMD build MyPackage
Distribuzione del tuo pacchetto
Attraverso Github
Basta creare un nuovo repository chiamato MyPackage e caricare tutto in MyPackage/ sul ramo master. Ecco un esempio .
Quindi chiunque può installare il pacchetto da github con devtools:
install_package("MyPackage", "your_github_usename")
Attraverso CRAN
Il pacchetto deve essere conforme alle Norme sui repository CRAN . Incluso ma non limitato a: il tuo pacchetto deve essere multipiattaforma (tranne alcuni casi molto speciali), dovrebbe superare il test di R CMD check .
Ecco il modulo di invio . Devi caricare il tarball sorgente.
Creare vignette
Una vignetta è una guida di lungo formato al tuo pacchetto. La documentazione delle funzioni è ottima se conosci il nome della funzione che ti serve, ma è inutile altrimenti. Una vignetta è come un capitolo di un libro o un documento accademico: può descrivere il problema che il pacchetto è progettato per risolvere e quindi mostrare al lettore come risolverlo.
Le vignette verranno create interamente in markdown.
Requisiti
- Rmarkdown:
install.packages("rmarkdown") - Pandoc
Creazione di vignette
devtools::use_vignette("MyVignette", "MyPackage")
Ora puoi modificare la tua vignetta in ./vignettes/MyVignette.Rmd .
Il testo nella tua vignetta è formattato come Markdown .
L'unica aggiunta al Markdown originale è un tag che prende il codice R, lo esegue, cattura l'output e lo traduce in Markdown formattato:
```{r}
# Add two numbers together
add <- function(a, b) a + b
add(10, 20)
```
Visualizzerà come:
# Add two numbers together
add <- function(a, b) a + b
add(10, 20)
## [1] 30
Pertanto, tutti i pacchetti che utilizzerai nelle tue vignette devono essere elencati come dipendenze in ./DESCRIPTION .