Sök…


Introduktion

Detta ämne kommer att täcka skapandet av R-paket från början med devtools-paketet.

Anmärkningar

  1. Officiell R-manual för att skapa paket
  2. roxygen2 referensmanual
  3. devtools referensmanual

Skapa och distribuera paket

Detta är en kompakt guide om hur du snabbt kan skapa ett R-paket från din kod. Uttömmande dokumentationer kommer att länkas när de är tillgängliga och bör läsas om du vill ha en djupare kunskap om situationen. Se anmärkningar för mer resurser.

Katalogen där din kod står kommer att hänvisas till ./ , och alla kommandon är avsedda att köras från en R-fråga i den här mappen.


Skapa dokumentationen

Dokumentationen för din kod måste vara i ett format som liknar LaTeX.

Men vi kommer att använda ett verktyg som heter roxygen för att förenkla processen:

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

Den fullständiga mansidan för roxygen finns här . Det är väldigt lik doxygen .

Här är ett praktiskt exempel på hur du dokumenterar en funktion med 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)
}

Och här blir resultatet .

Det rekommenderas också att skapa en vinjett (se ämnet Skapa vinjetter ), som är en fullständig guide om ditt paket.


Konstruktion av paketets skelett

Antagande att din kod skrivs till exempel i filer ./script1.R och ./script2.R , starta följande kommando för att skapa filträdet i ditt paket:

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

Radera sedan alla filerna i ./MyPackage/man/ . Du måste nu sammanställa dokumentationen:

roxygenize("MyPackage")

Du bör också generera en referensmanual från din dokumentation med R CMD Rd2pdf MyPackage från en kommandotolk som startades i ./ .


Utgåva av paketets egenskaper

1. Paketbeskrivning

Ändra ./MyPackage/DESCRIPTION enligt dina behov. Fälten Package , Version , License , Description , Title , Author och Maintainer är obligatoriska, det andra är valfritt.

Om ditt paket beror på andra paket, ange dem i ett fält som heter Depends (R-version <3.2.0) eller Imports (R-version> 3.2.0).

2. Valfria mappar

När du startade skelettbyggnaden hade ./MyPackage/ bara R/ och man/ undermappar. Men det kan ha några andra:

  • data/ : här kan du placera data som ditt bibliotek behöver och som inte är kod. Det måste sparas som dataset med .RData tillägget, och du kan ladda det under körning med data() och load()
  • tests/ : alla kodfiler i den här mappen körs vid installationstiden. Om det finns något fel misslyckas installationen.
  • src/ : för C / C ++ / Fortran-källfiler du behöver (med Rcpp ...).
  • exec/ : för andra körbara filer.
  • misc/ : för knappt allt annat.

Färdigställande och byggande

Du kan ta bort ./MyPackage/Read-and-delete-me .

Som det är nu är ditt paket klart att installeras.

Du kan installera det med devtools::install("MyPackage") .

För att bygga ditt paket som en källa tarball, måste du köra följande kommando från en kommandotolk i ./ : R CMD build MyPackage


Distribution av ditt paket

Genom Github

Skapa helt enkelt ett nytt arkiv som heter MyPackage och ladda upp allt i MyPackage/ till mastergrenen. Här är ett exempel .

Då kan vem som helst installera ditt paket från github med devtools:

install_package("MyPackage", "your_github_usename")

Genom CRAN

Ditt paket måste följa CRAN-lagringspolicyn . Inklusive men inte begränsat till: ditt paket måste vara plattformar (förutom några mycket speciella fall), det ska klara R CMD check .

Här är inlämningsformuläret . Du måste ladda upp källtarbollen.

Skapa vinjetter

En vinjett är en långformig guide till ditt paket. Funktionsdokumentation är bra om du vet namnet på den funktion du behöver, men den är värdelös annars. En vinjett är som ett bokkapitel eller en akademisk artikel: den kan beskriva problemet som ditt paket är utformat för att lösa och sedan visa läsaren hur man löser det.

Vignetter skapas helt och hållet i markdown.

Krav

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

Vignett skapande

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

Du kan nu redigera din vinjett på ./vignettes/MyVignette.Rmd .

Texten i din vinjett är formaterad som Markdown .

Det enda tillskottet till det ursprungliga Markdown är en tagg som tar R-kod, kör den, fångar utdata och översätter den till formaterad Markdown:

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

Visas som:

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

Därför måste alla paket du använder i dina vinjetter listas som beroenden i ./DESCRIPTION .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow