Back to Skills

create-r-package

pjt222
Updated 2 days ago
2 views
17
2
17
View on GitHub
Metaaitesting

About

This skill scaffolds a complete R package structure following modern best practices. It sets up essential components like DESCRIPTION, testing with testthat, documentation with roxygen2, dependency management with renv, and CI/CD with GitHub Actions. Use it when starting a new package, converting scripts into a package, or creating a collaborative project skeleton.

Quick Install

Claude Code

Recommended
Primary
npx skills add pjt222/agent-almanac -a claude-code
Plugin CommandAlternative
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternative
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/create-r-package

Copy and paste this command in Claude Code to install this skill

Documentation

Create R Package

Scaffold full R pkg w/ modern tools + best practices.

Use When

  • New R pkg from scratch
  • Loose R scripts → pkg
  • Pkg skeleton for collab dev

In

  • Required: Pkg name (lowercase, no special except .)
  • Required: 1-line desc
  • Optional: License (def: MIT)
  • Optional: Author (name, email, ORCID)
  • Optional: Init renv (def: yes)

Do

Step 1: Skeleton

usethis::create_package("packagename")
setwd("packagename")

Got: Dir w/ DESCRIPTION, NAMESPACE, R/, man/.

If err: Install usethis (install.packages("usethis")). Dir must not exist.

Step 2: DESCRIPTION

Edit w/ accurate metadata:

Package: packagename
Title: What the Package Does (Title Case)
Version: 0.1.0
Authors@R:
    person("First", "Last", , "[email protected]", role = c("aut", "cre"),
           comment = c(ORCID = "0000-0000-0000-0000"))
Description: One paragraph describing what the package does. Must be more
    than one sentence. Avoid starting with "This package".
License: MIT + file LICENSE
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.3.2
URL: https://github.com/username/packagename
BugReports: https://github.com/username/packagename/issues

Got: Valid DESCRIPTION, R CMD check no metadata warns.

If err: Warns → Title Case, Description >1 sentence, Authors@R valid person().

Step 3: Infra

usethis::use_mit_license()
usethis::use_readme_md()
usethis::use_news_md()
usethis::use_testthat(edition = 3)
usethis::use_git()
usethis::use_github_action("check-standard")

Got: LICENSE, README.md, NEWS.md, tests/, .git/, .github/workflows/.

If err: use_*() fail → install missing dep + rerun. .git/ exists → use_git() skips.

Step 4: Dev Config

.Rprofile:

if (file.exists("renv/activate.R")) {
  source("renv/activate.R")
}

if (requireNamespace("mcptools", quietly = TRUE)) {
  mcptools::mcp_session()
}

.Renviron.example:

RSTUDIO_PANDOC="C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools"
# GITHUB_PAT=your_github_token_here

.Rbuildignore:

^\.Rprofile$
^\.Renviron$
^\.Renviron\.example$
^renv$
^renv\.lock$
^CLAUDE\.md$
^\.github$
^.*\.Rproj$

Got: .Rprofile, .Renviron.example, .Rbuildignore created. Dev files excluded from build.

If err: .Rprofile startup err → check syntax. requireNamespace() guards → prevent fail on missing pkgs.

Step 5: Init renv

renv::init()

Got: renv/ + renv.lock. Local lib active.

If err: Install renv (install.packages("renv")). Hang → check network / options(timeout = 600).

Step 6: Pkg Doc File

R/packagename-package.R:

#' @keywords internal
"_PACKAGE"

## usethis namespace: start
## usethis namespace: end
NULL

Got: File w/ "_PACKAGE" sentinel. devtools::document() → pkg-level help.

If err: Filename = R/<packagename>-package.R. "_PACKAGE" standalone, not in fn.

Step 7: CLAUDE.md

Create CLAUDE.md in root w/ proj-specific instructions for AI.

Got: CLAUDE.md in root w/ conventions + build cmds + arch notes.

If err: Unsure → pkg name, 1-line desc, dev cmds (devtools::check(), devtools::test()), non-obvious conventions.

Check

  • devtools::check() → 0 err, 0 warn
  • Struct matches layout
  • .Rprofile loads no err
  • renv::status() OK
  • Git init + .gitignore
  • GH Actions workflow present

Traps

  • Name conflicts: Check CRAN available::available("packagename") pre-commit
  • Missing .Rbuildignore: Dev files (.Rprofile, .Renviron, renv/) must be excluded
  • Forgot Encoding: Always Encoding: UTF-8 in DESCRIPTION
  • RoxygenNote mismatch: Ver in DESCRIPTION = installed roxygen2

Examples

# Minimal creation
usethis::create_package("myanalysis")

# Full setup in one session
usethis::create_package("myanalysis")
usethis::use_mit_license()
usethis::use_testthat(edition = 3)
usethis::use_readme_md()
usethis::use_git()
usethis::use_github_action("check-standard")
renv::init()

  • write-roxygen-docs — doc fns
  • write-testthat-tests — add tests
  • setup-github-actions-ci — CI/CD config
  • manage-renv-dependencies — deps mgmt
  • write-claude-md — AI instr

GitHub Repository

pjt222/agent-almanac
Path: i18n/caveman-ultra/skills/create-r-package
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Related Skills

content-collections

Meta

This skill provides a production-tested setup for Content Collections, a TypeScript-first tool that transforms Markdown/MDX files into type-safe data collections with Zod validation. Use it when building blogs, documentation sites, or content-heavy Vite + React applications to ensure type safety and automatic content validation. It covers everything from Vite plugin configuration and MDX compilation to deployment optimization and schema validation.

View skill

polymarket

Meta

This skill enables developers to build applications with the Polymarket prediction markets platform, including API integration for trading and market data. It also provides real-time data streaming via WebSocket to monitor live trades and market activity. Use it for implementing trading strategies or creating tools that process live market updates.

View skill

creating-opencode-plugins

Meta

This skill helps developers create OpenCode plugins that hook into 25+ event types like commands, files, and LSP operations. It provides the plugin structure, event API specifications, and implementation patterns for JavaScript/TypeScript modules. Use it when you need to intercept, monitor, or extend the OpenCode AI assistant's lifecycle with custom event-driven logic.

View skill

sglang

Meta

SGLang is a high-performance LLM serving framework that specializes in fast, structured generation for JSON, regex, and agentic workflows using its RadixAttention prefix caching. It delivers significantly faster inference, especially for tasks with repeated prefixes, making it ideal for complex, structured outputs and multi-turn conversations. Choose SGLang over alternatives like vLLM when you need constrained decoding or are building applications with extensive prefix sharing.

View skill