R Language
Skapa paket med devtools
Sök…
Introduktion
Detta ämne kommer att täcka skapandet av R-paket från början med devtools-paketet.
Anmärkningar
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 meddata()
ochload()
-
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 (medRcpp
...). -
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
.