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
@seealsoand@family. - Reuse parameter documentation with
@inherit,@inheritParams, and@inheritSections. - Document multiple functions in the same place with
@describeInor@rdname. - Run arbitrary R code with
@eval. - Create reusable templates with
@templateand@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>.Rdepending 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.Rcontains#' @param first_arg Bla bla bla.
- e.g.,
- Markdown must be specified via
@mdin each template if not defined at package level. - Examples R scripts should be called
ex-<FUNCTION_NAME>.Rand 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
@rdnameto a different topic, since the documentation content must be probably adapted (e.g.@titleshould 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).