Agent-almanac create-r-package

install
source · Clone the upstream repo
git clone https://github.com/pjt222/agent-almanac
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/de/skills/create-r-package" ~/.claude/skills/pjt222-agent-almanac-create-r-package-ba74e1 && rm -rf "$T"
manifest: i18n/de/skills/create-r-package/SKILL.md
source content

R-Paket erstellen

Ein vollstaendig konfiguriertes R-Paket mit modernen Werkzeugen und Best Practices aufsetzen.

Wann verwenden

  • Beim Erstellen eines neuen R-Pakets von Grund auf
  • Beim Umwandeln loser R-Skripte in ein Paket
  • Beim Aufsetzen eines Paketgeruests fuer kollaborative Entwicklung

Eingaben

  • Erforderlich: Paketname (Kleinbuchstaben, keine Sonderzeichen ausser
    .
    )
  • Erforderlich: Einzeilige Beschreibung des Paketzwecks
  • Optional: Lizenztyp (Standard: MIT)
  • Optional: Autorinformationen (Name, E-Mail, ORCID)
  • Optional: Ob renv initialisiert werden soll (Standard: ja)

Vorgehensweise

Schritt 1: Paketgeruest erstellen

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

Erwartet: Verzeichnis erstellt mit

DESCRIPTION
,
NAMESPACE
,
R/
und
man/
Unterverzeichnissen.

Bei Fehler: Sicherstellen, dass usethis installiert ist (

install.packages("usethis")
). Pruefen, dass das Verzeichnis nicht bereits existiert.

Schritt 2: DESCRIPTION konfigurieren

DESCRIPTION
mit korrekten Metadaten bearbeiten:

Package: packagename
Title: What the Package Does (Title Case)
Version: 0.1.0
Authors@R:
    person("First", "Last", , "email@example.com", 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

Erwartet: Gueltige DESCRIPTION, die

R CMD check
ohne Metadaten-Warnungen besteht.

Bei Fehler: Falls

R CMD check
DESCRIPTION-Felder bemaengelt, sicherstellen, dass
Title
in Title Case ist,
Description
mehr als einen Satz enthaelt und
Authors@R
gueltige
person()
-Syntax verwendet.

Schritt 3: Infrastruktur einrichten

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")

Erwartet: LICENSE, README.md, NEWS.md,

tests/
-Verzeichnis,
.git/
initialisiert und
.github/workflows/
erstellt.

Bei Fehler: Falls eine

usethis::use_*()
-Funktion fehlschlaegt, die fehlende Abhaengigkeit installieren und erneut ausfuehren. Falls
.git/
bereits existiert, ueberspringt
use_git()
die Initialisierung.

Schritt 4: Entwicklungskonfiguration erstellen

.Rprofile
erstellen:

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

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

.Renviron.example
erstellen:

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

.Rbuildignore
-Eintraege erstellen:

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

Erwartet:

.Rprofile
,
.Renviron.example
und
.Rbuildignore
sind erstellt. Entwicklungsdateien sind vom gebauten Paket ausgeschlossen.

Bei Fehler: Falls

.Rprofile
beim Start Fehler verursacht, Syntaxprobleme pruefen. Sicherstellen, dass
requireNamespace()
-Schutzabfragen Fehler bei fehlenden optionalen Paketen verhindern.

Schritt 5: renv initialisieren

renv::init()

Erwartet:

renv/
-Verzeichnis und
renv.lock
erstellt. Projektlokale Bibliothek ist aktiv.

Bei Fehler: renv mit

install.packages("renv")
installieren. Falls renv bei der Initialisierung haengt, Netzwerkverbindung pruefen oder
options(timeout = 600)
setzen.

Schritt 6: Paketdokumentationsdatei erstellen

R/packagename-package.R
erstellen:

#' @keywords internal
"_PACKAGE"

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

Erwartet:

R/packagename-package.R
existiert mit dem
"_PACKAGE"
-Sentinel. Ausfuehren von
devtools::document()
generiert die paketweite Hilfe.

Bei Fehler: Sicherstellen, dass der Dateiname dem Muster

R/<packagename>-package.R
entspricht. Der
"_PACKAGE"
-String muss ein eigenstaendiger Ausdruck sein, nicht innerhalb einer Funktion.

Schritt 7: CLAUDE.md erstellen

CLAUDE.md
im Projektstammverzeichnis mit projektspezifischen Anweisungen fuer KI-Assistenten erstellen.

Erwartet:

CLAUDE.md
existiert im Projektstammverzeichnis mit projektspezifischen Bearbeitungskonventionen, Build-Befehlen und Architekturhinweisen.

Bei Fehler: Falls unsicher, was enthalten sein soll, mit dem Paketnamen, einer einzeiligen Beschreibung, gaengigen Entwicklungsbefehlen (

devtools::check()
,
devtools::test()
) und nicht offensichtlichen Konventionen beginnen.

Validierung

  • devtools::check()
    liefert 0 Fehler, 0 Warnungen
  • Paketstruktur entspricht dem erwarteten Layout
  • .Rprofile
    laedt fehlerfrei
  • renv::status()
    zeigt keine Probleme
  • Git-Repository initialisiert mit passendem
    .gitignore
  • GitHub Actions Workflow-Datei vorhanden

Haeufige Stolperfallen

  • Paketnamenskonflikte: Vor der Namensfestlegung CRAN mit
    available::available("packagename")
    pruefen
  • Fehlende .Rbuildignore-Eintraege: Entwicklungsdateien (
    .Rprofile
    ,
    .Renviron
    ,
    renv/
    ) muessen vom gebauten Paket ausgeschlossen werden
  • Encoding vergessen: Immer
    Encoding: UTF-8
    in DESCRIPTION einfuegen
  • RoxygenNote-Abweichung: Die Version in DESCRIPTION muss mit der installierten roxygen2-Version uebereinstimmen

Beispiele

# Minimale Erstellung
usethis::create_package("myanalysis")

# Vollstaendiges Setup in einer Sitzung
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()

Verwandte Skills

  • write-roxygen-docs
    - Funktionen dokumentieren
  • write-testthat-tests
    - Tests fuer das Paket hinzufuegen
  • setup-github-actions-ci
    - Detaillierte CI/CD-Konfiguration
  • manage-renv-dependencies
    - Paketabhaengigkeiten verwalten
  • write-claude-md
    - Wirksame KI-Assistenten-Anweisungen erstellen