Suche…


Einführung

Dieses Thema behandelt die Erstellung von R-Paketen von Grund auf mit dem Paket devtools.

Bemerkungen

  1. Offizielles R-Handbuch zum Erstellen von Paketen
  2. Referenzhandbuch für roxygen2
  3. devtools Referenzhandbuch

Pakete erstellen und verteilen

Dies ist eine kompakte Anleitung zum schnellen Erstellen eines R-Pakets aus Ihrem Code. Umfassende Dokumentationen werden, wenn verfügbar, verlinkt und sollten gelesen werden, wenn Sie die Situation besser verstehen möchten. Siehe Anmerkungen für weitere Ressourcen.

Das Verzeichnis, in dem Ihr Code steht, wird als ./ , und alle Befehle sollen von einer R-Eingabeaufforderung in diesem Ordner aus ausgeführt werden.


Erstellung der Dokumentation

Die Dokumentation für Ihren Code muss in einem Format vorliegen, das LaTeX sehr ähnlich ist.

Wir werden jedoch ein Tool namens roxygen verwenden, um den Prozess zu vereinfachen:

install.packages("devtools")
library("devtools")
install.packages("roxygen2")
library("roxygen2")

Die vollständige Manpage für roxygen finden Sie hier . Es ist dem Sauerstoff sehr ähnlich.

Hier ein praktisches Beispiel zur Dokumentation einer Funktion mit 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)
}

Und hier wird das Ergebnis sein .

Es wird außerdem empfohlen, eine Vignette zu erstellen (siehe Thema Erstellen von Vignetten ). Dies ist eine vollständige Anleitung zu Ihrem Paket.


Bau des Paketskeletts

Unter der Annahme, dass Ihr Code beispielsweise in die Dateien ./script1.R und ./script2.R , starten Sie den folgenden Befehl, um den Dateibaum Ihres Pakets zu erstellen:

package.skeleton(name="MyPackage", code_files=c("script1.R","script2.R"))

Löschen Sie dann alle Dateien in ./MyPackage/man/ . Sie müssen nun die Dokumentation zusammenstellen:

roxygenize("MyPackage")

Sie sollten auch ein Referenzhandbuch aus Ihrer Dokumentation mit R CMD Rd2pdf MyPackage über eine in ./ gestartete Eingabeaufforderung R CMD Rd2pdf MyPackage .


Edition der Paketeigenschaften

1. Beschreibung des Pakets

./MyPackage/DESCRIPTION Sie ./MyPackage/DESCRIPTION Ihren Anforderungen entsprechend. Die Felder Package , Version , License , Description , Title , Author und Maintainer sind Pflichtfelder, die anderen sind optional.

Wenn Ihr Paket von anderen Paketen abhängig ist, geben Sie diese in einem Feld mit dem Namen Depends (R-Version <3.2.0) oder Imports (R-Version> 3.2.0) an.

2. Optionale Ordner

Nachdem Sie den Skeleton-Build gestartet haben, hatte ./MyPackage/ nur noch R/ und man/ Unterordner. Es kann jedoch einige andere haben:

  • data/ : Hier können Sie die Daten platzieren, die Ihre Bibliothek benötigt und die kein Code sind. Es muss als Datensatz mit der Erweiterung .RData werden und Sie können es zur Laufzeit mit data() und load()
  • tests/ : Alle Codedateien in diesem Ordner werden zur Installationszeit ausgeführt. Wenn ein Fehler auftritt, schlägt die Installation fehl.
  • src/ : für C / C ++ / Fortran-Quelldateien, die Sie benötigen (mithilfe von Rcpp ...).
  • exec/ : für andere ausführbare Dateien.
  • misc/ : für fast alles andere.

Fertigstellung und Build

Sie können ./MyPackage/Read-and-delete-me löschen.

Das Paket kann jetzt installiert werden.

Sie können es mit devtools::install("MyPackage") .

Um Ihr Paket als Quell-Tarball zu erstellen, müssen Sie den folgenden Befehl über eine Eingabeaufforderung in ./ : R CMD build MyPackage


Verteilung Ihres Pakets

Durch Github

Erstellen Sie einfach ein neues Repository mit dem Namen MyPackage und laden Sie alles in MyPackage/ in den Master-Zweig MyPackage/ . Hier ist ein Beispiel .

Dann kann jeder Ihr Paket von github mit devtools installieren:

install_package("MyPackage", "your_github_usename")

Durch CRAN

Ihr Paket muss der CRAN-Repository-Richtlinie entsprechen . Einschließlich, aber nicht beschränkt auf: Ihr Paket muss plattformübergreifend sein (mit Ausnahme einiger sehr spezieller Fälle). Es sollte den R CMD check Prüfungstest bestehen.

Hier ist das Einreichungsformular . Sie müssen das Quell-Tarball hochladen.

Vignetten erstellen

Eine Vignette ist eine ausführliche Anleitung für Ihr Paket. Die Funktionsdokumentation ist großartig, wenn Sie den Namen der gewünschten Funktion kennen, ansonsten aber nichts. Eine Vignette ist wie ein Buchkapitel oder eine wissenschaftliche Arbeit: Sie kann das Problem beschreiben, das Ihr Paket lösen soll, und dem Leser dann zeigen, wie er es lösen kann.

Vignetten werden vollständig in Markdown erstellt.

Bedarf

  • Rmarkdown: install.packages("rmarkdown")
  • Pandoc

Vignetten-Erstellung

devtools::use_vignette("MyVignette", "MyPackage")

Sie können Ihre Vignette jetzt unter ./vignettes/MyVignette.Rmd bearbeiten.

Der Text in Ihrer Vignette wird als Markdown formatiert.

Der einzige Zusatz zum ursprünglichen Markdown ist ein Tag, das R-Code übernimmt, ausführt, die Ausgabe erfasst und in formatiertes Markdown übersetzt:

```{r}
# Add two numbers together
add <- function(a, b) a + b
add(10, 20)
```

Wird angezeigt als:

# Add two numbers together
add <- function(a, b) a + b
add(10, 20)
## [1] 30

Daher müssen alle Pakete, die Sie in Ihren Vignetten verwenden, als Abhängigkeiten in ./DESCRIPTION .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow