write-vignette
Acerca de
Esta habilidad ayuda a los desarrolladores a crear viñetas de paquetes R utilizando R Markdown o Quarto. Cubre la configuración, la configuración YAML, las opciones de fragmentos de código y los requisitos de CRAN para construir tutoriales orientados al usuario. Úsala para guías de "Primeros pasos", para documentar flujos de trabajo con múltiples funciones o para cumplir con los estándares de documentación de CRAN.
Instalación rápida
Claude Code
Recomendadonpx 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-vignetteCopia y pega este comando en Claude Code para instalar esta habilidad
Documentación
Write Vignette
Long-form doc vignettes for R pkgs.
Use When
- "Getting Started" tutorial for pkg
- Doc complex workflows across multi fns
- Domain-specific guides (stat methodology)
- CRAN submission requires user-facing docs beyond fn help
In
- Required: R pkg w/ fns to doc
- Required: Vignette title + topic
- Optional: Format (R Markdown or Quarto, default: R Markdown)
- Optional: Vignette needs external data|APIs?
Do
Step 1: Vignette File
usethis::use_vignette("getting-started", title = "Getting Started with packagename")
Got: vignettes/getting-started.Rmd created w/ YAML frontmatter. knitr + rmarkdown added to DESCRIPTION Suggests. vignettes/ dir exists.
If err: usethis::use_vignette() fails → verify cwd is pkg root (contains DESCRIPTION). knitr not installed → install.packages("knitr") first. Manual: create vignettes/ dir + file by hand, ensure YAML has all 3 %\Vignette* entries.
Step 2: Content
---
title: "Getting Started with packagename"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Getting Started with packagename}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
## Introduction
Brief overview of what the package does and who it's for.
## Installation
```r
install.packages("packagename")
library(packagename)
Basic Usage
Walk through the primary workflow:
# Load example data
data <- example_data()
# Process
result <- main_function(data, option = "default")
# Inspect
summary(result)
Advanced Features
Cover optional or advanced functionality.
Conclusion
Summarize and point to other vignettes or resources.
**Got:** Vignette Rmd has Intro, Install, Basic Usage, Advanced, Conclusion. Code uses pkg's exported fns + produces visible out.
**If err:** Examples fail to run → verify pkg installed `devtools::install()`. Examples use pkg name in `library()` (not `devtools::load_all()`). Fns requiring external resources → `eval=FALSE` to show w/o exec.
### Step 3: Code Chunks
Per chunk options:
```r
# Standard evaluated chunk
{r example-basic}
result <- compute_something(1:10)
result
# Show code but don't run (for illustrative purposes)
{r api-example, eval=FALSE}
connect_to_api(key = "your_key_here")
# Run but hide code (show only output)
{r hidden-setup, echo=FALSE}
library(packagename)
# Set global options
{r setup, include=FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 5
)
Got: Setup chunk w/ include=FALSE sets global opts (collapse, comment, fig.width, fig.height). Chunks configured: eval=FALSE for illustrative, echo=FALSE for hidden setup, std for interactive examples.
If err: Chunk opts not taking effect → verify syntax {r chunk-name, option=value} (comma-separated, no quotes around logicals). Setup chunk runs first → place at top.
Step 4: External Deps
Vignettes needing net access|optional pkgs:
{r check-available, include=FALSE}
has_suggested <- requireNamespace("optionalpkg", quietly = TRUE)
{r use-suggested, eval=has_suggested}
optionalpkg::special_function()
Long-running computations → pre-compute + save:
# Save pre-computed results to vignettes/
saveRDS(expensive_result, "vignettes/precomputed.rds")
# Load in vignette
{r load-precomputed}
result <- readRDS("precomputed.rds")
Got: External deps handled gracefully: optional pkgs conditional via requireNamespace(), net-dep code uses eval=FALSE|tryCatch(), expensive computations use pre-computed .rds.
If err: Vignette fails on CRAN due to unavail optional pkgs → wrap w/ conditional var (eval=has_suggested). Pre-computed → ensure .rds in vignettes/ + ref'd via relative path.
Step 5: Build + Test
# Build single vignette
devtools::build_vignettes()
# Build and check (catches vignette issues)
devtools::check()
Got: Vignette builds no errs. HTML out readable.
If err:
- Missing pandoc: Set
RSTUDIO_PANDOCin.Renviron - Pkg not installed:
devtools::install()first - Missing Suggests: Install pkgs in DESCRIPTION Suggests
Step 6: Verify in Pkg Check
devtools::check()
Vignette-related checks: builds correctly, doesn't take too long, no errs.
Got: devtools::check() passes no vignette-related errs|warnings. Vignette builds within CRAN time limits (typically < 60 sec).
If err: Vignette causes check failures → common fixes: add missing Suggests to DESCRIPTION, reduce build time w/ eval=FALSE on slow chunks, ensure VignetteIndexEntry matches title. Run devtools::build_vignettes() separately to isolate.
Check
- Vignette builds no errs via
devtools::build_vignettes() - All code chunks exec correctly
- VignetteIndexEntry matches title
-
devtools::check()passes no vignette warnings - Vignette appears in pkgdown site articles (if applicable)
- Build time reasonable (< 60 sec for CRAN)
Traps
- VignetteIndexEntry mismatch: Index entry in YAML must match what users see in
vignette(package = "pkg") - Missing
vignetteYAML block: All 3%\Vignette*lines required - Vignette too slow for CRAN: Pre-compute results or
eval=FALSEfor expensive ops - Pandoc not found: Ensure
RSTUDIO_PANDOCenv var set - Self-referencing pkg:
library(packagename)notdevtools::load_all()in vignettes
→
write-roxygen-docs— fn-level docs complement vignette tutorialsbuild-pkgdown-site— vignettes appear as articles on pkgdownsubmit-to-cran— CRAN has specific vignette reqscreate-quarto-report— Quarto as alt to R Markdown vignettes
Repositorio GitHub
Habilidades relacionadas
content-collections
MetaEsta habilidad proporciona una configuración probada en producción para Content Collections, una herramienta centrada en TypeScript que transforma archivos Markdown/MDX en colecciones de datos con tipado seguro mediante validación Zod. Úsala al construir blogs, sitios de documentación o aplicaciones Vite + React con mucho contenido para garantizar seguridad de tipos y validación automática de contenido. Abarca todo, desde la configuración del plugin de Vite y compilación MDX hasta la optimización de despliegue y validación de esquemas.
polymarket
MetaEsta habilidad permite a los desarrolladores crear aplicaciones con la plataforma de mercados de predicción Polymarket, incluyendo la integración de API para operaciones y datos de mercado. También proporciona transmisión de datos en tiempo real a través de WebSocket para monitorear operaciones en vivo y actividad del mercado. Úsela para implementar estrategias de trading o crear herramientas que procesen actualizaciones de mercado en tiempo real.
creating-opencode-plugins
MetaEsta habilidad ayuda a los desarrolladores a crear complementos de OpenCode que se conectan a más de 25 tipos de eventos, como comandos, archivos y operaciones LSP. Proporciona la estructura del complemento, las especificaciones de la API de eventos y los patrones de implementación para módulos en JavaScript/TypeScript. Úsala cuando necesites interceptar, monitorear o extender el ciclo de vida del asistente de IA de OpenCode con lógica personalizada basada en eventos.
sglang
MetaSGLang es un framework de alto rendimiento para el servicio de LLM que se especializa en generación rápida y estructurada para JSON, expresiones regulares y flujos de trabajo de agentes utilizando su caché de prefijos RadixAttention. Ofrece una inferencia significativamente más rápida, especialmente para tareas con prefijos repetidos, lo que lo hace ideal para salidas complejas y estructuradas, y conversaciones multiturno. Elige SGLang sobre alternativas como vLLM cuando necesites decodificación restringida o estés construyendo aplicaciones con uso extensivo de prefijos compartidos.
