R Language
Tworzenie pakietów za pomocą devtools
Szukaj…
Wprowadzenie
Ten temat obejmie tworzenie pakietów R od zera za pomocą pakietu devtools.
Uwagi
Tworzenie i dystrybucja pakietów
Jest to kompaktowy przewodnik na temat szybkiego tworzenia pakietu R z kodu. Wyczerpujące dokumentacje zostaną połączone, jeśli będą dostępne, i należy je przeczytać, jeśli chcesz głębiej poznać sytuację. Zobacz uwagi, aby uzyskać więcej zasobów.
Katalog, w którym znajduje się kod, będzie oznaczony jako ./
, a wszystkie polecenia powinny być wykonywane z wiersza polecenia R w tym folderze.
Tworzenie dokumentacji
Dokumentacja twojego kodu musi mieć format bardzo podobny do LaTeX.
Jednak w celu uproszczenia procesu użyjemy narzędzia o nazwie roxygen
:
install.packages("devtools")
library("devtools")
install.packages("roxygen2")
library("roxygen2")
Pełna strona podręcznika użytkownika dla roxygen jest dostępna tutaj . Jest bardzo podobny do doksygen .
Oto praktyczna próbka na temat dokumentowania funkcji za pomocą 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)
}
I oto będzie wynik .
Zalecane jest również utworzenie winiety (patrz temat Tworzenie winiet ), która jest pełnym przewodnikiem po twojej paczce.
Budowa szkieletu pakietu
Zakładając, że Twój kod jest zapisany na przykład w plikach ./script1.R
i ./script2.R
, uruchom następujące polecenie, aby utworzyć drzewo plików pakietu:
package.skeleton(name="MyPackage", code_files=c("script1.R","script2.R"))
Następnie usuń wszystkie pliki w ./MyPackage/man/
. Musisz teraz skompilować dokumentację:
roxygenize("MyPackage")
Należy również wygenerować podręcznik referencyjny z dokumentacji przy użyciu R CMD Rd2pdf MyPackage
z wiersza polecenia uruchomionego w ./
.
Edycja właściwości pakietu
1. Opis opakowania
Zmodyfikuj ./MyPackage/DESCRIPTION
zgodnie z ./MyPackage/DESCRIPTION
potrzebami. Pola Package
, Version
, License
, Description
, Title
, Author
i Maintainer
są obowiązkowe, pozostałe są opcjonalne.
Jeśli Twój pakiet zależy od innych pakietów, określ je w polu o nazwie Depends
(wersja R <3.2.0) lub Imports
(wersja R> 3.2.0).
2. Opcjonalne foldery
Po uruchomieniu wersji szkieletu ./MyPackage/
miał tylko R/
i man/
podfoldery. Może jednak mieć kilka innych:
-
data/
: tutaj możesz umieścić dane, których potrzebuje twoja biblioteka i które nie są kodem. Musi zostać zapisany jako zestaw danych z rozszerzeniem.RData
i można go załadować w czasie wykonywania za pomocądata()
iload()
-
tests/
: wszystkie pliki kodu w tym folderze zostaną uruchomione podczas instalacji. Jeśli wystąpi jakikolwiek błąd, instalacja nie powiedzie się. -
src/
: do plików źródłowych C / C ++ / Fortran potrzebujesz (używającRcpp
...). -
exec/
: dla innych plików wykonywalnych. -
misc/
: dla prawie wszystkiego innego.
Finalizacja i kompilacja
Możesz usunąć ./MyPackage/Read-and-delete-me
.
W tej chwili pakiet jest gotowy do zainstalowania.
Możesz zainstalować go za pomocą devtools::install("MyPackage")
.
Aby zbudować pakiet jako źródłowy plik archiwalny, musisz wykonać następujące polecenie z wiersza polecenia w ./
: R CMD build MyPackage
Dystrybucja pakietu
Poprzez Github
Wystarczy utworzyć nowe repozytorium o nazwie MyPackage i przesłać wszystko z MyPackage/
do gałęzi master. Oto przykład .
Następnie każdy może zainstalować twój pakiet z github z devtools:
install_package("MyPackage", "your_github_usename")
Poprzez CRAN
Twój pakiet musi być zgodny z Zasadami repozytorium CRAN . W tym między innymi: twój pakiet musi być wieloplatformowy (z wyjątkiem niektórych bardzo szczególnych przypadków), powinien przejść test R CMD check
.
Oto formularz zgłoszeniowy . Musisz wgrać kod źródłowy.
Tworzenie winiet
Winieta jest długim przewodnikiem po paczce. Dokumentacja funkcji jest świetna, jeśli znasz nazwę funkcji, której potrzebujesz, ale w przeciwnym razie jest bezużyteczna. Winieta jest jak rozdział w książce lub artykuł akademicki: może opisać problem, który twoja paczka ma rozwiązać, a następnie pokazać czytelnikowi, jak ją rozwiązać.
Winiety zostaną utworzone w całości przy obniżaniu cen.
Wymagania
- Rmarkdown:
install.packages("rmarkdown")
- Pandoc
Tworzenie winiety
devtools::use_vignette("MyVignette", "MyPackage")
Możesz teraz edytować swoją winietę na stronie ./vignettes/MyVignette.Rmd
.
Tekst w winiecie jest sformatowany jako Markdown .
Jedynym dodatkiem do oryginalnego Markdown jest znacznik, który pobiera kod R, uruchamia go, przechwytuje dane wyjściowe i tłumaczy na sformatowany Markdown:
```{r}
# Add two numbers together
add <- function(a, b) a + b
add(10, 20)
```
Wyświetli się jako:
# Add two numbers together
add <- function(a, b) a + b
add(10, 20)
## [1] 30
Dlatego wszystkie pakiety, których użyjesz w swoich winietach, muszą być wymienione jako zależności w ./DESCRIPTION
.