AgentSkillsCN

Roxygen2 Pkgdown

Roxygen2 Pkgdown

SKILL.md

roxygen2 and pkgdown

Overview

Complete reference for roxygen2 documentation syntax and pkgdown site configuration. Covers all roxygen2 tags, cross-referencing, and advanced pkgdown customization.

roxygen2 Fundamentals

Basic Tags

r
#' @title Short title (optional, first paragraph used if omitted)
#' @description Longer description (optional, second paragraph used if omitted)
#' @details Additional details section
#' @param name Description of parameter
#' @return Description of return value
#' @examples Runnable R code
#' @export Add function to NAMESPACE exports
#' @keywords keyword1 keyword2
#' @author Author Name

Parameter Documentation

r
#' @param x A numeric vector of values.
#' @param y Character string specifying the method. One of:
#'   - `"method1"`: Description of method 1
#'   - `"method2"`: Description of method 2
#' @param data A data frame containing:
#'   \describe{
#'     \item{col1}{Description of column 1}
#'     \item{col2}{Description of column 2}
#'   }
#' @param ... Additional arguments passed to [other_function()].
#' @param .data Internal use only. Data frame to process.

Return Value Documentation

r
#' @return A numeric vector of the same length as `x`.

#' @return A list with components:
#'   \describe{
#'     \item{fitted}{Fitted values from the model.}
#'     \item{residuals}{Model residuals.}
#'     \item{coefficients}{Named vector of coefficients.}
#'   }

#' @return A tibble with columns:
#'   * `term`: Character. The term name.
#'   * `estimate`: Numeric. Point estimate.
#'   * `std.error`: Numeric. Standard error.

#' @return Invisibly returns the input `x`.

Examples

r
#' @examples
#' # Basic usage
#' result <- my_function(1:10)
#'
#' # With options
#' result <- my_function(1:10, method = "fast")
#'
#' \dontrun{
#' # Code that shouldn't be run (e.g., requires authentication)
#' connect_to_database()
#' }
#'
#' \donttest{
#' # Code that runs but is skipped in R CMD check (slow examples)
#' slow_computation(big_data)
#' }
#'
#' @examplesIf interactive()
#' # Only run interactively
#' open_plot_window()

Cross-Referencing

Linking to Functions

r
#' See [other_function()] for details.
#' This wraps [stats::lm()].
#' Similar to [dplyr::mutate()].
#' See [pkg::function()] from external package.

#' @seealso [related_function()], [another_function()]
#' @seealso
#' * [function1()] for X
#' * [function2()] for Y
#' * [pkg::function3()] for Z

Linking to Topics

r
#' See [topic-name] for the vignette.
#' See \code{vignette("topic")} for details.
#' See the \href{https://example.com}{website}.

Advanced roxygen2 Tags

Inheritance

r
#' @inheritParams other_function
#' @inheritDotParams other_function arg1 arg2
#' @inherit other_function return
#' @inherit other_function details
#' @inheritSection other_function Section Name

Function Families

r
#' @family data import functions
#' @concept data manipulation

Multiple Functions Per File

r
#' Function A
#' @rdname shared-docs
#' @export
function_a <- function(x) {}

#' Function B
#' @rdname shared-docs
#' @export
function_b <- function(x) {}

#' @rdname shared-docs
#' @usage NULL
#' @aliases function_a function_b

Conditional Exports

r
#' @rawNamespace if (getRversion() >= "4.0") export(new_function)

S3 Methods

r
#' @export
#' @method print myclass
print.myclass <- function(x, ...) {}

#' @exportS3Method
print.myclass <- function(x, ...) {}

S4 Classes and Methods

r
#' MyClass
#'
#' @slot x Numeric slot
#' @slot y Character slot
#'
#' @exportClass MyClass
setClass("MyClass", slots = c(x = "numeric", y = "character"))

#' @exportMethod mymethod
setMethod("mymethod", "MyClass", function(object) {})

Imports

r
#' @import dplyr
#' @importFrom ggplot2 ggplot aes
#' @importMethodsFrom pkg method
#' @importClassesFrom pkg Class

Markdown in roxygen2

Enable Markdown

r
# In DESCRIPTION:
Roxygen: list(markdown = TRUE)

Markdown Syntax

r
#' **Bold** and *italic* text
#'
#' - Bullet point 1
#' - Bullet point 2
#'
#' 1. Numbered item 1
#' 2. Numbered item 2
#'
#' `inline code` and [links](https://example.com)
#'
#' ```r
#' # Code block
#' x <- 1:10
#' ```
#'
#' | Column 1 | Column 2 |
#' |----------|----------|
#' | A        | B        |

pkgdown Configuration

Basic _pkgdown.yml

yaml
url: https://user.github.io/pkg/

template:
  bootstrap: 5
  bootswatch: flatly

navbar:
  structure:
    left: [intro, reference, articles, tutorials, news]
    right: [search, github]
  components:
    github:
      icon: fab fa-github
      href: https://github.com/user/pkg

reference:
  - title: Main Functions
    desc: Core functionality
    contents:
      - main_function
      - helper_function
  - title: Utilities
    contents:
      - starts_with("util_")
  - title: internal
    contents:
      - internal_function

articles:
  - title: Getting Started
    navbar: ~
    contents:
      - pkgname
  - title: Advanced Topics
    contents:
      - advanced-usage
      - customization

news:
  releases:
    - text: "Version 1.0.0"
      href: https://github.com/user/pkg/releases/tag/v1.0.0

Reference Organization

yaml
reference:
  - title: Data Import
    desc: Functions for importing data
    contents:
      - read_data
      - read_csv_data
      - matches("^read_")

  - title: Data Transformation
    contents:
      - transform_data
      - starts_with("transform_")

  - title: Analysis
    contents:
      - has_concept("analysis")

  - title: Visualization
    contents:
      - has_keyword("plot")

  - subtitle: Core Plots
    contents:
      - plot_main

  - subtitle: Diagnostic Plots
    contents:
      - plot_diagnostics

Custom Styling

yaml
template:
  bootstrap: 5
  bootswatch: flatly
  bslib:
    primary: "#0054AD"
    border-radius: 0.5rem
    btn-border-radius: 0.25rem
  includes:
    in_header: |
      <!-- Google Analytics -->
      <script async src="https://www.googletagmanager.com/gtag/js"></script>

Home Page Customization

yaml
home:
  title: Package Name
  description: One-line description

  links:
    - text: Learn more
      href: https://example.com

  sidebar:
    structure: [links, license, community, citation, authors, dev]

Articles Configuration

yaml
articles:
  - title: Tutorials
    navbar: Tutorials
    contents:
      - articles/getting-started
      - articles/basic-usage

  - title: Advanced
    navbar: Advanced
    contents:
      - articles/advanced-topics

  - title: Internal
    contents:
      - articles/internal-docs
    # Not in navbar

Building pkgdown Site

Build Commands

r
# Build entire site
pkgdown::build_site()

# Build specific parts
pkgdown::build_home()
pkgdown::build_reference()
pkgdown::build_articles()
pkgdown::build_news()

# Preview locally
pkgdown::preview_site()

# Check site
pkgdown::check_pkgdown()

GitHub Actions Deployment

yaml
# .github/workflows/pkgdown.yaml
on:
  push:
    branches: [main, master]
  release:
    types: [published]
  workflow_dispatch:

name: pkgdown

jobs:
  pkgdown:
    runs-on: ubuntu-latest
    env:
      GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
      - uses: r-lib/actions/setup-pandoc@v2
      - uses: r-lib/actions/setup-r@v2
        with:
          use-public-rspm: true
      - uses: r-lib/actions/setup-r-dependencies@v2
        with:
          extra-packages: any::pkgdown, local::.
          needs: website
      - name: Build site
        run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)
        shell: Rscript {0}
      - name: Deploy to GitHub pages
        uses: JamesIves/github-pages-deploy-action@v4
        with:
          clean: false
          branch: gh-pages
          folder: docs

Workflow

r
# Development cycle
devtools::document()        # Generate man/ files
devtools::check()           # Check package
pkgdown::build_site()       # Build website

# Quick preview
pkgdown::build_reference_index()
pkgdown::build_article("vignette-name")

Common Patterns

Reexporting Functions

r
#' @importFrom magrittr %>%
#' @export
magrittr::`%>%`

#' @importFrom rlang .data
#' @export
rlang::.data

Deprecated Functions

r
#' @description
#' `r lifecycle::badge("deprecated")`
#'
#' This function is deprecated. Use [new_function()] instead.
#'
#' @keywords internal
#' @export
old_function <- function(...) {
  lifecycle::deprecate_warn("1.0.0", "old_function()", "new_function()")
  new_function(...)
}

Internal Functions

r
#' Internal function
#'
#' @keywords internal
#' @noRd
internal_helper <- function(x) {}