如何使用roxygen记录包含同名函数的R包?

时间:2016-06-21 19:18:01

标签: r roxygen2 roxygen

我正在学习使用roxygen。我看到rd vignette提倡使用“_PACKAGE”表示我正在创建包文档,并说“如果已经有一个名为pkgname()的函数,这也有效。”

我也看到了使用

R packages book方法
NULL

指定了@docType和@name,但是当我尝试使用这两种方法制作玩具示例时,它无法正常工作。

作为一个玩具示例,我想创建一个包含“hello()”函数的“hello”包。

我希望通过

获取有关我的hello 的文档
?hello

或者像

这样的东西
package?hello

我期望获得有关包含的功能

的文档
?hello()

我哪里错了? - 使用roxygen实现,我试图查询文档的方式,不正确的期望,还是其他什么?

我已经查看了有关package documentationfunction documentation的问题,但我仍不清楚。

以下是我的玩具示例的一些细节:

你好/描述文件:

Package: hello
Type: Package
Title: A mostly empty package
Version: 0.1
Date: 2016-06-21
Authors@R: person("Some", "Person", email = "fake@madeup.org", role = c("aut", "cre"))
Description: More about what it does (maybe more than one line)
License: MIT
LazyData: TRUE
RoxygenNote: 5.0.1.9000

您好/ R / hello.R

#' hello
#'
#' This is a mostly empty package to learn roxygen documentation.
#'
#' Hello allows me to learn how to write documentation in comment blocks
#' co-located with code.
#' @docType package
#' @name hello
"_PACKAGE"

#' hello
#'
#' This function returns "Hello, world!".
#' @export
#' @examples
#' hello()

hello <- function() {
  print("Hello, world!")
}

这样,运行document()后,会生成hello / man / hello.Rd。它包含我为hello包和hello()函数编写的描述的组合。 ?hello?hello()都返回.Rd文件。

以下是.Rd的样子:

% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/hello.R
\docType{package}
\name{hello}
\alias{hello}
\alias{hello-package}
\title{hello}
\usage{
hello()
}
\description{
This is a mostly empty package to learn roxygen documentation.

This function returns "Hello, world!".
}
\details{
Hello allows me to learn how to write documentation in comment blocks
co-located with code.
}
\examples{
hello()
}

3 个答案:

答案 0 :(得分:7)

通过@hadley,&#34;不要使用@ name hello。这会覆盖默认命名&#34;和#34;有时你需要重新启动R,因为devtools和dev docs有一些错误&#34;

所以,如果我把我的hello.R文件更改为:

#' hello
#'
#' This is a mostly empty package to learn roxygen documentation.
#'
#' Hello allows me to learn how to write documentation in comment blocks
#' co-located with code.
"_PACKAGE"

#' hello
#'
#' This function returns "Hello, world!".
#' @export
#' @examples
#' hello()

hello <- function() {
  print("Hello, world!")
}

然后document()生成hello-package.Rd和hello.Rd文件。加载library(hello)后,package?hello提供了包文档,?hello提供了函数文档,正如我拍摄的那样!

再次感谢你,@ hadley!

答案 1 :(得分:0)

正如 Johan Larsson 和 brendan 在对 this answer 的评论中所指出的,函数的别名似乎被包覆盖了。

提到了herehere 的解决方案。它是添加 @aliases {pkgname}-package(在本例中为 @aliases hello-package)。

答案 2 :(得分:0)

看到反复说需要加@aliases {pkgname}-package,但是我不清楚是在hello函数的注释块中还是在包doc块中。

剧透警告:它在包文档块中:

#' hello
#'
#' This is a mostly empty package to learn roxygen documentation.
#'
#' Hello allows me to learn how to write documentation in comment blocks
#' co-located with code.
#' @aliases hello-package
"_PACKAGE"

#' hello
#'
#' This function returns "Hello, world!".
#' @export
#' @examples
#' hello()

hello <- function() {
  print("Hello, world!")
}