Создание пакета devtools roxygen и документация по rd
Я новичок в roxygen и изо всех сил пытаюсь понять, как использовать его для быстрого создания нового / нестандартного пакета.
Т.е. я хотел бы знать минимальные требования, чтобы сделать пакет под названием package1
с помощью devtools
, roxygen2/3
так что я могу запустить команды
require(package1)
fun1(20)
fun2(20)
генерировать 2000 и 4000 случайных нормалей соответственно
Итак, давайте возьмем самый простой пример.
Если у меня есть две функции fun1
а также fun2
fun1 <- function(x){
rnorm(100*x)
}
а также
fun2 <- function(y){
rnorm(200*y)
}
параметры числовые, возвращаемые значения числовые. Я почти уверен, что это не метод S3, давайте назовем заголовки fun1 и fun2.... я не слишком уверен, какую другую информацию мне нужно будет предоставить. Я могу поставить fun1 и fun2 в отдельности .R
файлы и добавить немного #'
но я не уверен, чтобы включить все соответствующие требования для roxygen, а также не уверен, что включать в качестве релевантных требований и как использовать его для создания документации для пакета. Я предполагаю, что пространство имен просто будет иметь имена fun1 и fun2? и описание пакета будет просто общая информация, касающаяся меня... и функции пакета?
Любые пошаговые инструкции будут с удовольствием приняты.
РЕДАКТИРОВАТЬ: ниже, как далеко я должен начать с...
Я могу сделать следующее, чтобы создать pacakge... но не могу использовать roxygen для создания документации...
package.skeleton(list = c("fun1","fun2"), name = "package1")
и вот где я не уверен, пропустил ли я кучу шагов или нет...
roxygenise("package1")
поэтому при попытке установить я получаю следующее сообщение об ошибке
system("R CMD INSTALL package1")
* installing to library ‘/Library/Frameworks/R.framework/Versions/2.15/Resources/library’
* installing *source* package ‘package1’ ...
** R
** preparing package for lazy loading
** help
Warning: /path.to.package/package1/man/package1-package.Rd:32: All text must be in a section
*** installing help indices
Error in Rd_info(db[[i]]) :
missing/empty \title field in '/path.to.package/package1/man/fun1.Rd'
Rd files must have a non-empty \title.
See chapter 'Writing R documentation' in manual 'Writing R Extensions'.
* removing ‘/Library/Frameworks/R.framework/Versions/2.15/Resources/library/package1’
2 ответа
Я удивлен, что hadley не использует package.skeleton в своем комментарии. я хотел бы использовать package.skeleton
, добавьте блоки комментариев roxygen, затем удалите все файлы в каталоге "man" и запустите roxygenize
, Однако, поскольку Хэдли говорит "Нееееееееееет", вот минимум, который вам необходим для создания пакета, который проходит проверку CMD R и экспортирует ваши функции.
Создайте каталог под названием "package1". В этом каталоге создайте файл с именем DESCRIPTION и поместите его в него (отредактируйте его, если хотите):
ОПИСАНИЕ
Package: package1
Type: Package
Title: What the package does (short line)
Version: 0.0.1
Date: 2012-11-12
Author: Who wrote it
Maintainer: Who to complain to <yourfault@somewhere.net>
Description: More about what it does (maybe more than one line)
License: GPL
Теперь создайте каталог с именем "R" и добавьте файл для каждой функции (или, если хотите, вы можете поместить обе свои функции в один и тот же файл). Я создал 2 файла: fun1.R и fun2.R
fun1.R
#' fun1
#' @param x numeric
#' @export
fun1 <- function(x){
rnorm(100*x)
}
fun2.R
#' fun2
#' @param y numeric
#' @export
fun2 <- function(y){
rnorm(200*y)
}
Теперь вы можете roxygenize
ваш пакет
R> library(roxygen2)
Loading required package: digest
R> list.files()
[1] "package1"
R> roxygenize("package1")
Updating collate directive in /home/garrett/tmp/package1/DESCRIPTION
Updating namespace directives
Writing fun1.Rd
Writing fun2.Rd
Поскольку вы упомянули devtools в заголовке вашего Q, вы можете использовать build
а также install
функции от devtools
build('package1')
install('package1')
Или вы можете выйти из R и использовать инструменты, поставляемые с R, для сборки / проверки / установки.
$ R CMD build package1
$ R CMD check package1_0.0.1.tar.gz
$ R CMD INSTALL package1_0.0.1.tar.gz
Теперь снова запустите R, чтобы использовать ваш новый пакет.
$ R --vanilla -q
library(package1)
fun1(20)
fun2(20)
Но выяснение минимальных требований вряд ли поможет вам (или пользователям вашего пакета) во многом. Вам было бы гораздо лучше изучить один из множества пакетов, использующих roxgen2.
Вот лучшая версия файла fun1.R, который до сих пор не использует все возможные теги roxygen, но гораздо лучше, чем минимум
Модифицированный fun1.R
#' fun1
#'
#' This is the Description section
#'
#' This is the Details section
#'
#' @param x numeric. this is multiplied by 100 to determine the length of the returned vector
#' @return a numeric vector of random deviates of length \code{100 * x}
#' @author your name
#' @seealso \code{\link{fun2}}
#' @examples
#' fun1(2)
#' length(fun1(20))
#' @export
fun1 <- function(x){
rnorm(100*x)
}
Намного позже - вы можете позволить RoxygenReady подготовить ваши функции с минимальным каркасом аннотации Roxygen. Это в основном приводит вас от ваших двух функций ввода к ответу GSee, который является входом Roxygen2.