i18n/de/skills/add-rcpp-integration/SKILL.md
Rcpp- oder RcppArmadillo-Integration zu einem R-Paket fuer hochperformanten C++-Code hinzufuegen. Behandelt Einrichtung, Schreiben von C++-Funktionen, RcppExports-Generierung, Tests fuer kompilierten Code und Debugging. Verwenden, wenn eine R-Funktion zu langsam ist und Profiling einen Engpass bestaetigt, wenn eine Schnittstelle zu bestehenden C/C++-Bibliotheken benoetigt wird, oder beim Implementieren von Algorithmen (Schleifen, Rekursion, lineare Algebra), die von kompiliertem Code profitieren.
npx skillsauth add pjt222/agent-almanac add-rcpp-integrationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
C++-Code mit Rcpp fuer leistungskritische Operationen in ein R-Paket integrieren.
usethis::use_rcpp()
Dies:
src/-VerzeichnisRcpp zu LinkingTo und Imports in DESCRIPTION hinzuR/packagename-package.R mit @useDynLib und @importFrom Rcpp sourceCpp.gitignore fuer kompilierte DateienFuer RcppArmadillo:
usethis::use_rcpp_armadillo()
Erwartet: src/-Verzeichnis erstellt, DESCRIPTION mit Rcpp in LinkingTo und Imports aktualisiert, und R/packagename-package.R enthaelt @useDynLib-Direktive.
Bei Fehler: Wenn usethis::use_rcpp() fehlschlaegt, manuell src/ erstellen, LinkingTo: Rcpp und Imports: Rcpp zu DESCRIPTION hinzufuegen und #' @useDynLib packagename, .registration = TRUE sowie #' @importFrom Rcpp sourceCpp zur Paket-Level-Dokumentationsdatei hinzufuegen.
src/my_function.cpp erstellen:
#include <Rcpp.h>
using namespace Rcpp;
//' Compute cumulative sum efficiently
//'
//' @param x A numeric vector
//' @return A numeric vector of cumulative sums
//' @export
// [[Rcpp::export]]
NumericVector cumsum_cpp(NumericVector x) {
int n = x.size();
NumericVector out(n);
out[0] = x[0];
for (int i = 1; i < n; i++) {
out[i] = out[i - 1] + x[i];
}
return out;
}
Fuer RcppArmadillo:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
//' Matrix multiplication using Armadillo
//'
//' @param A A numeric matrix
//' @param B A numeric matrix
//' @return The matrix product A * B
//' @export
// [[Rcpp::export]]
arma::mat mat_mult(const arma::mat& A, const arma::mat& B) {
return A * B;
}
Erwartet: C++-Quelldatei existiert unter src/my_function.cpp mit gueltiger // [[Rcpp::export]]-Annotation und Roxygen-artigen //'-Dokumentationskommentaren.
Bei Fehler: Pruefen, ob die Datei #include <Rcpp.h> (oder <RcppArmadillo.h> fuer Armadillo) verwendet, dass die Export-Annotation in einer eigenen Zeile direkt oberhalb der Funktionssignatur steht und die Rueckgabetypen auf gueltige Rcpp-Typen abgebildet sind.
Rcpp::compileAttributes()
devtools::document()
Erwartet: R/RcppExports.R und src/RcppExports.cpp automatisch generiert.
Bei Fehler: Auf C++-Syntaxfehler pruefen. Sicherstellen, dass das // [[Rcpp::export]]-Tag oberhalb jeder exportierten Funktion vorhanden ist.
devtools::load_all()
Erwartet: Paket kompiliert und wird ohne Fehler geladen.
Bei Fehler: Compiler-Ausgabe auf Fehler pruefen. Haeufige Probleme:
Rcpp::depends-Attribut fuer RcppArmadillotest_that("cumsum_cpp matches base R", {
x <- c(1, 2, 3, 4, 5)
expect_equal(cumsum_cpp(x), cumsum(x))
})
test_that("cumsum_cpp handles edge cases", {
expect_equal(cumsum_cpp(numeric(0)), numeric(0))
expect_equal(cumsum_cpp(c(NA_real_, 1)), c(NA_real_, NA_real_))
})
Erwartet: Tests bestehen und bestaetigen, dass die C++-Funktion identische Ergebnisse wie das R-Aequivalent liefert und Grenzfaelle (leere Vektoren, NA-Werte) korrekt behandelt.
Bei Fehler: Wenn Tests bei der NA-Behandlung fehlschlagen, explizite NA-Pruefungen im C++-Code mit NumericVector::is_na() hinzufuegen. Wenn Tests bei leerer Eingabe fehlschlagen, am Anfang der Funktion eine Schutzklausel fuer Vektoren der Laenge Null hinzufuegen.
src/Makevars erstellen:
PKG_CXXFLAGS = -O2
cleanup im Paketstammverzeichnis erstellen (fuer CRAN):
#!/bin/sh
rm -f src/*.o src/*.so src/*.dll
Ausfuehrbar machen: chmod +x cleanup
Erwartet: src/Makevars setzt Compiler-Flags und das cleanup-Skript entfernt kompilierte Objekte. Beide Dateien existieren auf Paketstamm-Ebene.
Bei Fehler: Pruefen, ob cleanup Ausfuehrungs-Berechtigungen hat (chmod +x cleanup) und dass Makevars Tabs (keine Leerzeichen) fuer Einrueckungen verwendet, wenn Makefile-Regeln hinzugefuegt werden.
Sicherstellen, dass kompilierte Artefakte korrekt behandelt werden:
^src/.*\.o$
^src/.*\.so$
^src/.*\.dll$
Erwartet: .Rbuildignore-Muster verhindern, dass kompilierte Objektdateien in das Paket-Tarball aufgenommen werden, waehrend Quelldateien und Makevars erhalten bleiben.
Bei Fehler: devtools::check() ausfuehren und nach Hinweisen zu unerwarteten Dateien in src/ suchen. .Rbuildignore-Muster anpassen, um nur .o-, .so- und .dll-Dateien auszuschliessen.
devtools::load_all() kompiliert ohne WarnungenR CMD check besteht ohne KompilierungswarnungencompileAttributes() vergessen: RcppExports nach Aenderungen an C++-Dateien neu generierendouble statt int fuer grosse numerische Werte verwendendelete aufrufenRcpp::NumericVector::is_na() pruefen@useDynLib: Die Paket-Level-Dokumentation muss @useDynLib packagename, .registration = TRUE enthaltencreate-r-package - Paketeinrichtung vor dem Hinzufuegen von Rcppwrite-testthat-tests - kompilierte Funktionen testensetup-github-actions-ci - CI muss C++-Toolchain habensubmit-to-cran - kompilierte Pakete benoetigen zusaetzliche CRAN-Pruefungentesting
Launch all available agents in parallel waves for open-ended hypothesis generation on problems where the correct domain is unknown. Use when facing a cross-domain problem with no clear starting point, when single-agent approaches have stalled, or when diverse perspectives are more valuable than deep expertise. Produces a ranked hypothesis set with convergence analysis and adversarial refinement.
tools
Write integration tests for a Node.js CLI application using the built-in node:test module. Covers the exec helper pattern, output assertions, filesystem state verification, cleanup hooks, JSON output parsing, error case testing, and state restoration after destructive tests. Use when adding tests to an existing CLI, testing a new command, verifying adapter behavior across frameworks, or setting up CI for a CLI tool.
development
Screen a proposed trademark for conflicts and distinctiveness before filing. Covers trademark database searches (TMview, WIPO Global Brand Database, USPTO TESS), distinctiveness analysis using the Abercrombie spectrum, likelihood of confusion assessment using DuPont factors and EUIPO relative grounds, common law rights evaluation, and goods/services overlap analysis. Produces a conflict report with a risk matrix. Use before adopting a new brand name, logo, or slogan — distinct from patent prior art search, which uses different databases, legal frameworks, and analysis methods.
tools
Scaffold a new CLI command using Commander.js with options, action handler, three output modes (human-readable, quiet, JSON), and optional ceremony variant. Covers command naming, option design, shared context patterns, error handling, and integration testing. Use when adding a command to an existing Commander.js CLI, designing a new CLI tool from scratch, or standardizing command structure across a multi-command CLI.