write-roxygen-docs
À propos
Cette compétence Claude génère une documentation roxygen2 complète pour les packages R, couvrant les fonctions, jeux de données, classes et méthodes tout en suivant le style tidyverse. Elle gère automatiquement les balises standard, les références croisées, les exemples et les entrées NAMESPACE. Utilisez-la pour documenter de nouvelles exportations, des fonctions internes d'aide, ou pour corriger les notes de vérification R CMD check liées à la documentation.
Installation rapide
Claude Code
Recommandénpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/write-roxygen-docsCopiez et collez cette commande dans Claude Code pour installer cette compétence
Documentation
Write Roxygen Docs
Complete roxygen2 docs → R fns, datasets, classes.
Use When
- New exported fn → docs
- Internal helper fns
- Pkg datasets
- S3/S4/R6 classes + methods
- Fix doc-related
R CMD checknotes
In
- Required: R fn|dataset|class to doc
- Optional: Related fns → cross-ref (
@family,@seealso) - Optional: Export fn?
Do
Step 1: Fn Docs
Roxygen comments directly above fn:
#' Compute the weighted mean of a numeric vector
#'
#' Calculates the arithmetic mean of `x` weighted by `w`. Missing values
#' in either `x` or `w` are handled according to the `na.rm` parameter.
#'
#' @param x A numeric vector of values.
#' @param w A numeric vector of weights, same length as `x`.
#' @param na.rm Logical. Should missing values be removed? Default `FALSE`.
#'
#' @return A single numeric value representing the weighted mean.
#'
#' @examples
#' weighted_mean(1:5, rep(1, 5))
#' weighted_mean(c(1, 2, NA, 4), c(1, 1, 1, 1), na.rm = TRUE)
#'
#' @export
#' @family summary functions
#' @seealso [stats::weighted.mean()] for the base R equivalent
weighted_mean <- function(x, w, na.rm = FALSE) {
# implementation
}
Got: Complete roxygen w/ title, desc, @param per param, @return, @examples, @export.
If err: Unsure tag → ?roxygen2::rd_roclet. Common omission @return → CRAN required for all exports.
Step 2: Essential Tags
| Tag | Purpose | Required for export? |
|---|---|---|
#' Title | First line, one sentence | Yes |
#' Description | Paragraph after blank line | Yes |
@param | Parameter documentation | Yes |
@return | Return value description | Yes (CRAN) |
@examples | Usage examples | Strongly recommended |
@export | Add to NAMESPACE | Yes, for public API |
@family | Group related functions | Recommended |
@seealso | Cross-references | Optional |
@keywords internal | Mark as internal | For non-exported docs |
Got: Required tags ID'd. Exports have @param, @return, @examples, @export minimum.
If err: Tag unfamiliar → roxygen2 docs for usage + syntax.
Step 3: Doc Datasets
Create R/data.R:
#' Example dataset of city temperatures
#'
#' A dataset containing daily temperature readings for major cities.
#'
#' @format A data frame with 365 rows and 4 variables:
#' \describe{
#' \item{date}{Date of observation}
#' \item{city}{City name}
#' \item{temp_c}{Temperature in Celsius}
#' \item{humidity}{Relative humidity percentage}
#' }
#' @source \url{https://example.com/data}
"city_temperatures"
Got: R/data.R has roxygen blocks per dataset w/ @format describing structure + @source for provenance.
If err: R CMD check warns undocumented dataset → ensure quoted string ("city_temperatures") exactly matches obj name saved w/ usethis::use_data().
Step 4: Doc Pkg
Create R/packagename-package.R:
#' @keywords internal
"_PACKAGE"
## usethis namespace: start
## usethis namespace: end
NULL
Got: R/packagename-package.R exists w/ @keywords internal + "_PACKAGE" sentinel. devtools::document() generates man/packagename-package.Rd.
If err: R CMD check reports missing pkg doc page → verify file R/<packagename>-package.R + contains "_PACKAGE".
Step 5: Special Cases
Fns w/ dots in names (S3 methods):
#' @export
#' @rdname process
process.myclass <- function(x, ...) {
# S3 method
}
Reuse docs w/ @inheritParams:
#' @inheritParams weighted_mean
#' @param trim Fraction of observations to trim.
trimmed_mean <- function(x, w, na.rm = FALSE, trim = 0.1) {
# implementation
}
No visible binding fix w/ .data pronoun:
#' @importFrom rlang .data
my_function <- function(df) {
dplyr::filter(df, .data$column > 5)
}
Got: Special cases (S3 methods, inherited params, .data pronoun) documented correctly. @rdname groups S3 methods. @inheritParams reuses params w/o duplicate.
If err: R CMD check warns "no visible binding for global variable" → #' @importFrom rlang .data or utils::globalVariables() last resort.
Step 6: Generate Docs
devtools::document()
Got: man/ updated w/ .Rd files per documented obj. NAMESPACE regenerated w/ correct exports + imports.
If err: Roxygen syntax errs. Common: unclosed brackets in \describe{}, missing #' prefix, invalid tag names. Re-run devtools::document() after fix.
Check
- Every exported fn has
@param,@return,@examples -
devtools::document()runs no errs -
devtools::check()no doc warnings -
@familytags group correctly - Examples run no errs (
devtools::run_examples())
Traps
- Missing
@return: CRAN requires all exports doc return value - Examples need internet/auth: Wrap
\dontrun{}w/ comment why - Slow examples:
\donttest{}for examples that work but slow for CRAN - Markdown in roxygen: Enable
Roxygen: list(markdown = TRUE)in DESCRIPTION - Forget
devtools::document(): Man pages generated, not hand-written
→
create-r-package— initial pkg setup including roxygen configwrite-testthat-tests— test fns you docwrite-vignette— long-form docs beyond fn refsubmit-to-cran— doc requirements for CRAN
Dépôt GitHub
Compétences associées
content-collections
MétaCette compétence propose une configuration éprouvée en production pour Content Collections, un outil axé sur TypeScript qui transforme des fichiers Markdown/MDX en collections de données typées de manière sûre avec une validation Zod. Utilisez-la lors de la création de blogs, de sites de documentation ou d'applications Vite + React riches en contenu pour garantir la sécurité de typage et la validation automatique du contenu. Elle couvre tout, de la configuration du plugin Vite et de la compilation MDX à l'optimisation des déploiements et la validation des schémas.
polymarket
MétaCette compétence permet aux développeurs de créer des applications avec la plateforme de marchés prédictifs Polymarket, incluant l'intégration d'API pour le trading et les données de marché. Elle fournit également une diffusion de données en temps réel via WebSocket pour surveiller les transactions en direct et l'activité du marché. Utilisez-la pour mettre en œuvre des stratégies de trading ou pour créer des outils traitant les mises à jour de marché en direct.
creating-opencode-plugins
MétaCette compétence aide les développeurs à créer des plugins OpenCode qui s'interconnectent avec plus de 25 types d'événements tels que les commandes, les fichiers et les opérations LSP. Elle fournit la structure du plugin, les spécifications de l'API événementielle et les modèles d'implémentation pour les modules JavaScript/TypeScript. Utilisez-la lorsque vous avez besoin d'intercepter, de surveiller ou d'étendre le cycle de vie de l'assistant IA OpenCode avec une logique personnalisée pilotée par les événements.
sglang
MétaSGLang est un framework de service LLM haute performance spécialisé dans la génération rapide et structurée pour les workflows JSON, regex et agentiques grâce à son cache de préfixe RadixAttention. Il offre une inférence nettement plus rapide, particulièrement pour les tâches avec des préfixes répétés, ce qui le rend idéal pour les sorties complexes et structurées ainsi que les conversations multi-tours. Choisissez SGLang plutôt que des alternatives comme vLLM lorsque vous avez besoin d'un décodage contraint ou que vous construisez des applications avec un partage étendu de préfixes.
