write-vignette
À propos
Cette compétence aide les développeurs à créer des vignettes de packages R en utilisant R Markdown ou Quarto. Elle couvre la configuration, les paramètres YAML, les options des blocs de code et les exigences CRAN pour la création de tutoriels destinés aux utilisateurs. Utilisez-la pour des guides "Premiers pas", pour documenter des workflows multi-fonctions ou pour respecter les normes de documentation CRAN.
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-vignetteCopiez et collez cette commande dans Claude Code pour installer cette compétence
Documentation
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
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.
