Agent-almanac write-roxygen-docs
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/es/skills/write-roxygen-docs" ~/.claude/skills/pjt222-agent-almanac-write-roxygen-docs-ce5005 && rm -rf "$T"
i18n/es/skills/write-roxygen-docs/SKILL.mdEscribir Documentación Roxygen
Crear documentación roxygen2 completa para funciones, conjuntos de datos y clases de paquetes R.
Cuándo Usar
- Añadir documentación a una nueva función exportada
- Documentar funciones auxiliares internas
- Documentar conjuntos de datos del paquete
- Documentar clases y métodos S3/S4/R6
- Corregir notas de
relacionadas con la documentaciónR CMD check
Entradas
- Obligatorio: Función, conjunto de datos o clase R a documentar
- Opcional: Funciones relacionadas para referencias cruzadas (
,@family
)@seealso - Opcional: Si la función debe ser exportada
Procedimiento
Paso 1: Escribir la Documentación de la Función
Colocar los comentarios roxygen directamente encima de la función:
#' 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 }
Esperado: Bloque roxygen completo con título, descripción,
@param para cada parámetro, @return, @examples y @export.
En caso de fallo: Si se desconoce una etiqueta, consultar
?roxygen2::rd_roclet. La omisión más frecuente es @return, que CRAN requiere en todas las funciones exportadas.
Paso 2: Referencia de Etiquetas Esenciales
| Etiqueta | Propósito | ¿Obligatoria para exportar? |
|---|---|---|
| Primera línea, una oración | Sí |
| Párrafo tras línea en blanco | Sí |
| Documentación de parámetros | Sí |
| Descripción del valor retornado | Sí (CRAN) |
| Ejemplos de uso | Muy recomendado |
| Añadir a NAMESPACE | Sí, para la API pública |
| Agrupar funciones relacionadas | Recomendado |
| Referencias cruzadas | Opcional |
| Marcar como interno | Para docs no exportadas |
Esperado: Se identifican todas las etiquetas obligatorias para el tipo de función. Las funciones exportadas tienen como mínimo
@param, @return, @examples y @export.
En caso de fallo: Si una etiqueta es desconocida, consultar la documentación de roxygen2 para su uso y sintaxis.
Paso 3: Documentar Conjuntos de Datos
Crear
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"
Esperado:
R/data.R contiene bloques roxygen para cada conjunto de datos con @format describiendo la estructura y @source indicando la procedencia de los datos.
En caso de fallo: Si
R CMD check advierte sobre conjuntos de datos sin documentar, asegurarse de que la cadena entre comillas (p. ej., "city_temperatures") coincide exactamente con el nombre del objeto guardado con usethis::use_data().
Paso 4: Documentar el Paquete
Crear
R/packagename-package.R:
#' @keywords internal "_PACKAGE" ## usethis namespace: start ## usethis namespace: end NULL
Esperado:
R/packagename-package.R existe con @keywords internal y el centinela "_PACKAGE". Al ejecutar devtools::document() se genera man/packagename-package.Rd.
En caso de fallo: Si
R CMD check reporta que falta la página de documentación del paquete, verificar que el archivo se llama R/<packagename>-package.R y contiene la cadena "_PACKAGE".
Paso 5: Gestionar Casos Especiales
Funciones con puntos en el nombre (métodos S3):
#' @export #' @rdname process process.myclass <- function(x, ...) { # S3 method }
Reutilizar documentación con
@inheritParams:
#' @inheritParams weighted_mean #' @param trim Fraction of observations to trim. trimmed_mean <- function(x, w, na.rm = FALSE, trim = 0.1) { # implementation }
Corrección de "no visible binding" usando el pronombre
.data:
#' @importFrom rlang .data my_function <- function(df) { dplyr::filter(df, .data$column > 5) }
Esperado: Los casos especiales (métodos S3, parámetros heredados, pronombre
.data) se documentan correctamente. @rdname agrupa los métodos S3. @inheritParams reutiliza la documentación de parámetros sin duplicación.
En caso de fallo: Si
R CMD check advierte sobre "no visible binding for global variable", añadir #' @importFrom rlang .data o usar utils::globalVariables() como último recurso.
Paso 6: Generar la Documentación
devtools::document()
Esperado: El directorio
man/ se actualiza con archivos .Rd para cada objeto documentado. NAMESPACE se regenera con las exportaciones e importaciones correctas.
En caso de fallo: Revisar los errores de sintaxis de roxygen. Problemas frecuentes: corchetes sin cerrar en
\describe{}, falta el prefijo #' en una línea, o nombres de etiquetas inválidos. Ejecutar devtools::document() de nuevo tras corregir.
Validación
- Cada función exportada tiene
,@param
y@return@examples -
se ejecuta sin erroresdevtools::document() -
no muestra advertencias de documentacióndevtools::check() - Las etiquetas
agrupan correctamente las funciones relacionadas@family - Los ejemplos se ejecutan sin errores (probar con
)devtools::run_examples()
Errores Comunes
- Falta
: CRAN requiere que todas las funciones exportadas documenten su valor de retorno@return - Ejemplos que necesitan internet o autenticación: Envolver en
con un comentario explicativo\dontrun{} - Ejemplos lentos: Usar
para ejemplos que funcionan pero tardan demasiado para CRAN\donttest{} - Markdown en roxygen: Activar con
en DESCRIPTIONRoxygen: list(markdown = TRUE) - Olvidar ejecutar
: Las páginas man se generan, no se escriben a manodevtools::document()
Habilidades Relacionadas
- configuración inicial del paquete incluyendo roxygencreate-r-package
- probar las funciones que se documentanwrite-testthat-tests
- documentación extensa más allá de la referencia de funcioneswrite-vignette
- requisitos de documentación para CRANsubmit-to-cran