Поиск…


Вступление

Эта тема будет посвящена созданию пакетов R с нуля с пакетом devtools.

замечания

  1. Официальное руководство R для создания пакетов
  2. справочное руководство roxygen2
  3. руководство пользователя 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 .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow