R Language
Создание пакетов с помощью devtools
Поиск…
Вступление
Эта тема будет посвящена созданию пакетов R с нуля с пакетом devtools.
замечания
Создание и распространение пакетов
Это компактное руководство о том, как быстро создать пакет R из вашего кода. Исчерпывающие документы будут связаны, когда они доступны, и их следует читать, если вы хотите более глубокое знание ситуации. См. Примечания для получения дополнительных ресурсов.
Каталог, в котором находится ваш код, будет обозначаться как ./
, и все команды предназначены для выполнения из приглашения R в этой папке.
Создание документации
Документация для вашего кода должна быть в формате, который очень похож на LaTeX.
Однако для упрощения процесса мы будем использовать инструмент с именем roxygen
:
install.packages("devtools")
library("devtools")
install.packages("roxygen2")
library("roxygen2")
Полную страницу man для roxygen можно найти здесь . Он очень похож на doxygen .
Ниже приведен практический пример о том, как документировать функцию с помощью 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)
}
Также рекомендуется создать виньетку (см. Раздел « Создание виньет» ), который является полным руководством по вашему пакету.
Построение скелета упаковки
Предполагая, что ваш код написан, например, в файлах ./script1.R
и ./script2.R
, запустите следующую команду, чтобы создать дерево файлов вашего пакета:
package.skeleton(name="MyPackage", code_files=c("script1.R","script2.R"))
Затем удалите все файлы в ./MyPackage/man/
. Теперь вы должны составить документацию:
roxygenize("MyPackage")
Вы также должны создать справочное руководство из своей документации, используя R CMD Rd2pdf MyPackage
из командной строки, запущенной в ./
.
Выдача свойств пакета
1. Описание пакета
Измените ./MyPackage/DESCRIPTION
соответствии с вашими потребностями. Поля Package
, Version
, License
, Description
, Title
, Author
и Maintainer
являются обязательными, другие необязательны.
Если ваш пакет зависит от других пакетов, укажите их в поле с именем Depends
(версия R <3.2.0) или Imports
(версия R> 3.2.0).
2. Дополнительные папки
Когда вы запустили сборку скелета, ./MyPackage/
только R/
и man/
subfolders. Однако у него могут быть и другие:
-
data/
: здесь вы можете поместить данные, которые нужны вашей библиотеке, и которые не являются кодом. Он должен быть сохранен как набор данных с расширением.RData
, и вы можете загрузить его во время выполнения сdata()
иload()
-
tests/
: все файлы кода в этой папке будут запускаться во время установки. Если произошла ошибка, установка завершится с ошибкой. -
src/
: для исходных файлов C / C ++ / Fortran (с помощьюRcpp
...). -
exec/
: для других исполняемых файлов. -
misc/
: для всего остального.
Завершение и сборка
Вы можете удалить ./MyPackage/Read-and-delete-me
.
Как и сейчас, ваш пакет готов к установке.
Вы можете установить его с помощью devtools::install("MyPackage")
.
Чтобы создать свой пакет в качестве исходного tarball, вам нужно выполнить следующую команду из командной строки в ./
: R CMD build MyPackage
Распространение вашего пакета
Через Гитуб
Просто создайте новый репозиторий MyPackage и загрузите все в MyPackage/
в главную ветку. Вот пример .
Тогда любой может установить ваш пакет из github с помощью devtools:
install_package("MyPackage", "your_github_usename")
Через CRAN
Ваш пакет должен соответствовать политике репозитория CRAN . Включая, но не ограничиваясь: ваш пакет должен быть межплатформенным (за исключением некоторых особых случаев), он должен пройти R CMD check
проверки R CMD check
.
Вот форма подачи . Вы должны загрузить исходный архив.
Создание виньет
Виньетка - это длинный путеводитель по вашему пакету. Документация по функциям замечательна, если вы знаете имя нужной вам функции, но это бесполезно иначе. Виньетка похожа на книгу или научную статью: она может описать проблему, которую ваш пакет предназначен для решения, а затем показать читателю, как его решить.
Виньетки будут созданы полностью в уценке.
Требования
- Rmarkdown:
install.packages("rmarkdown")
- Pandoc
Создание виньетки
devtools::use_vignette("MyVignette", "MyPackage")
Теперь вы можете редактировать свою виньетку ./vignettes/MyVignette.Rmd
.
Текст в вашей виньетке отформатирован как Markdown .
Единственное дополнение к оригинальному Markdown - это тег, который использует R-код, запускает его, захватывает вывод и переводит его в форматированный Markdown:
```{r}
# Add two numbers together
add <- function(a, b) a + b
add(10, 20)
```
Отобразится как:
# Add two numbers together
add <- function(a, b) a + b
add(10, 20)
## [1] 30
Таким образом, все пакеты, которые вы будете использовать в ваших виньетках, должны быть указаны как зависимости в ./DESCRIPTION
.