Создание пакета 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, а также не уверен, что включить в качестве соответствующих требований и как использовать его для создания документации rd для пакета. являются. Я предполагаю, что пространство имен будет иметь только имена fun1 и fun2? и описание пакета будет просто общей информацией, относящейся ко мне... и функции пакета?

любые пошаговые руководства будут с радостью приняты.

РЕДАКТИРОВАТЬ: Ниже показано, как далеко я начал с...

Я могу дойти до следующего, чтобы создать пакет... но не могу использовать 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’

person h.l.m    schedule 12.11.2012    source источник
comment
Самый простой способ начать работу — package.skeleton(), а позже, если вам понадобится документация, используйте roxygen2.   -  person baptiste    schedule 12.11.2012
comment
Посмотрите раздел разработки пакетов https://github.com/hadley/devtools/wiki. Также есть глава в эта книга   -  person mnel    schedule 12.11.2012
comment
Я пробовал функцию package.skeleton()... но вся проблема была связана с docmuemtatio... Я скорректировал вопрос, чтобы проиллюстрировать свою проблему...   -  person h.l.m    schedule 12.11.2012
comment
Нееет, не используйте package.skeleton — это добавляет много дерьма, которое вам просто нужно удалить. Но я не уверен, почему вы хотите использовать здесь roxygen — если вы делаете только локальный пакет, вам вообще не нужна документация.   -  person hadley    schedule 12.11.2012
comment
идея состоит в том, чтобы отправить его в репозиторий github после того, как основная файловая структура и документация будут настроены, тогда другие могут взять разные части и внести соответствующие изменения.   -  person h.l.m    schedule 12.11.2012
comment
rmini помогает в этом.   -  person Ari B. Friedman    schedule 27.05.2013


Ответы (2)


Я удивлен, что @hadley говорит не использовать package.skeleton в своем комментарий. Я бы использовал package.skeleton, добавил блоки комментариев roxygen, затем удалил все файлы в каталоге «man» и запустил roxygenize. Однако, поскольку Хэдли говорит "Не-е-ет", вот минимум, необходимый для создания пакета, который проходит проверку R CMD и экспортирует ваши функции.

Создайте каталог с именем «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 <[email protected]>
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 в заголовке своего вопроса, вы можете использовать функции 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)
}
person GSee    schedule 12.11.2012
comment
Спасибо за очень полезный и подробный ответ! - person D. Woods; 28.02.2013
comment
Нужно выразить признательность за помощь, хотя прошло 5 лет с тех пор, как вы ответили на этот вопрос, это помогло мне создать мой первый пакет~ - person cloudscomputes; 06.02.2018

Намного позже. Вы можете позволить RoxygenReady подготовить свои функции с минимальным скелетом аннотации Roxygen. В основном это приводит вас от ваших двух входных функций к ответу GSee, который является вводом Roxygen2.

person bud.dugong    schedule 28.02.2016
comment
Я заканчиваю свой первый пакет R и начинаю второй. Когда я был в агонии с пакетом 1, я ненавидел скуку и хотел, чтобы у меня был RoxygenReady. Теперь я немного использовал его и хотел бы, чтобы он был просто частью roxygen2! Очень красиво, жаль, что не нашла раньше! - person Michael; 29.10.2020