1.3 Advanced usage and consistent documentation
Several techniques and tools are available to enable and support a more consistent and maintainable documentation.
This can be described in detail in the Do repeat yourself section of vignette Generating Rd files, and are summarized as follows
- Cross-link documentation files with
@seealso
and@family
. - Reuse parameter documentation with
@inherit
,@inheritParams
, and@inheritSections
. - Document multiple functions in the same place with
@describeIn
or@rdname
. - Run arbitrary R code with
@eval
. - Create reusable templates with
@template
and@templateVar
.
1.3.1 Roxygen templates and example scripts
Roxygen templates allow modularizing documentation content. Shared content
sits in R files under the man-roxygen directory, and is included using the
@template
tag.
Similarly, examples written as normal R code can be included in the ‘Examples’
section using @example
(without s
), which for long examples is way more
convenient and less tedious than writing them as roxygen comments in the
@examples
section.
- The man-roxygen directory must be added to .Rbuildignore, e.g. via
usethis::use_build_ignore("man-roxygen")
- Template files should be called
<TAG>-<NAME>.R
depending on which@<TAG>
they contain (typically one per template), and be included according to the corresponding tag order. This improves the readability and maintenance of template-based documentation- e.g.,
param-first_arg.R
contains#' @param first_arg Bla bla bla.
- e.g.,
- Markdown must be specified via
@md
in each template if not defined at package level. - Examples R scripts should be called
ex-<FUNCTION_NAME>.R
and placed in man-roxygen (for convenience). They are then included via@example man-roxygen/ex-<FUNCTION_NAME>.R
.
1.3.2 Using @rdname
and @describeIn
Tags @rdname
and @describeIn
are a convenient way to document multiple
functions in the same file. See the roxygen2 vignette Generating Rd
files
(vignette("rd", package = "roxygen2")
) for more detail.
In both case, not that @title
should be specified only for the main
documentation object, since it will be ignored for others (a help page allowing
only one title).
It may also be convenient to collect the main generic documentation content as
roxygen2 tags for a NULL
object with an explicit @name
(see examples below).
Usage of @rdname
@rdname
provides the greatest flexibility for combining documentation
(description, arguments, details, etc.) of several objects into a single
documentation entry.
Tag @rdname
should the first tag, and should be used exclusively when
appending documentation content for a new object to another existing
@rdname
. Having an @rdname
for single and full-documented objects should be
avoided since
- it is redundant and unnecessary;
- it gives the impression we want to document this object alongside others;
- it does not help if we later want to change the
@rdname
to a different topic, since the documentation content must be probably adapted (e.g.@title
should be removed as it would be ignored).
Usage of @describeIn
@describeIn <name> <description>
is meant for a set of functions with
(almost) same arguments and that can be described in a general way in the
‘Description’ section, whereas individual <description>
s are collected in a
final section ‘Functions’.
Tag @describeIn
should be the last tag before the specific @examples
and
namespace tags (and possibly after specific @param
).