devtools roxygen包创建和rd文档

h.l*_*l.m 8 r devtools rd roxygen roxygen2

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

即我想知道最低要求是制作一个名为package1using 的包devtools,roxygen2/3以便我可以运行命令

require(package1)
fun1(20)
fun2(20)
Run Code Online (Sandbox Code Playgroud)

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

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

如果我有两个功能fun1fun2

fun1 <- function(x){
    rnorm(100*x)
}
Run Code Online (Sandbox Code Playgroud)

fun2 <- function(y){
    rnorm(200*y)
}
Run Code Online (Sandbox Code Playgroud)

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

任何一步一步的指南都会很高兴收到.

编辑:以下是我开始的距离......

我可以得到以下内容来创建一个pacakge ...但是不能使用roxygen来制作文档......

package.skeleton(list = c("fun1","fun2"), name = "package1")
Run Code Online (Sandbox Code Playgroud)

这里是我不确定我是否错过了一堆步骤......

roxygenise("package1")
Run Code Online (Sandbox Code Playgroud)

因此,当尝试安装时,我收到以下错误消息

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’
Run Code Online (Sandbox Code Playgroud)

GSe*_*See 20

我很惊讶@hadley说他的评论中没有使用package.skeleton .我会使用package.skeleton,添加roxygen注释块,然后删除"man"目录中的所有文件并运行roxygenize.但是,由于Hadley说"Noooooooooo",所以这是你需要能够构建一个通过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
Run Code Online (Sandbox Code Playgroud)

现在创建一个名为"R"的目录并为每个函数添加一个文件(或者,如果需要,可以将两个函数放在同一个文件中).我创建了2个文件:fun1.R和fun2.R

fun1.R

#' fun1
#' @param x numeric
#' @export
fun1 <- function(x){
    rnorm(100*x)
}
Run Code Online (Sandbox Code Playgroud)

fun2.R

#' fun2
#' @param y numeric
#' @export
fun2 <- function(y){
    rnorm(200*y)
}
Run Code Online (Sandbox Code Playgroud)

现在你可以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
Run Code Online (Sandbox Code Playgroud)

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

build('package1')
install('package1')
Run Code Online (Sandbox Code Playgroud)

或者您可以退出R并使用R附带的工具来构建/检查/安装.

$ R CMD build package1
$ R CMD check package1_0.0.1.tar.gz
$ R CMD INSTALL package1_0.0.1.tar.gz 
Run Code Online (Sandbox Code Playgroud)

现在,再次启动R以使用您的新包.

$ R --vanilla -q

library(package1)
fun1(20)
fun2(20)
Run Code Online (Sandbox Code Playgroud)

但是,确定最低要求不太可能对您(或您的包裹的用户)有所帮助.研究使用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)
}
Run Code Online (Sandbox Code Playgroud)