devtools roxygen包创建和rd文档

时间:2012-11-12 05:59:34

标签: r devtools roxygen roxygen2 rd

我是roxygen的新手,我很难看到如何使用它来快速创建新的/自定义包。

即。我想知道最低要求是使用package1devtools创建名为roxygen2/3的包,以便我可以运行命令

require(package1)
fun1(20)
fun2(20)

分别生成2000和4000个随机法线

让我们举一个最简单的例子。

如果我有两个功能fun1fun2

fun1 <- function(x){
    rnorm(100*x)
}

fun2 <- function(y){
    rnorm(200*y)
}

params是数字,返回值是数字。我很确定这不是一个S3方法,让我们调用标题fun1和fun2 ....我不太确定我需要提供的其他信息。我可以将fun1和fun2放在单独的.R文件中,并添加#'的abit,但我不确定是否包含roxygen的所有相关要求,也不确定要包含哪些相关要求以及如何使用它来创建与包一起使用的rd文档是。我假设名称空间只有名称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 个答案:

答案 0 :(得分:19)

我很惊讶@hadley说不要在comment中使用package.skeleton。我会使用package.skeleton,添加roxygen注释块,然后删除“man”目录中的所有文件并运行roxygenize。但是,由于Hadley说“Noooooooooo”,这里是 minimum ,你需要能够构建一个通过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 <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

由于您在Q的标题中提到了 devtools ,因此您可以使用devtools中的buildinstall函数

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)
}

答案 1 :(得分:0)

很久以后 - 你可以让RoxygenReady用最小的Roxygen注释骨架来准备你的函数。它基本上将你从2个输入函数带到GSee的答案,这是 Roxygen2 的输入。