add-rcpp-integration
Über
Diese Fähigkeit integriert Rcpp oder RcppArmadillo in ein R-Paket für hochleistungsfähigen C++-Code. Sie behandelt Einrichtung, Schreiben von C++-Funktionen, Generieren von RcppExports, Testen von kompiliertem Code und Debugging. Nutzen Sie sie, wenn Profiling Leistungsengpässe in R-Funktionen aufdeckt, bei der Schnittstellenanbindung an bestehende C/C++-Bibliotheken oder bei der Implementierung von Algorithmen wie Schleifen, Rekursion oder linearer Algebra, die von Kompilierung profitieren.
Schnellinstallation
Claude Code
Empfohlennpx 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/add-rcpp-integrationKopieren Sie diesen Befehl und fügen Sie ihn in Claude Code ein, um diese Fähigkeit zu installieren
Dokumentation
name: add-rcpp-integration description: > Añadir integración con Rcpp o RcppArmadillo a un paquete R para código C++ de alto rendimiento. Cubre la configuración, la escritura de funciones C++, la generación de RcppExports, las pruebas del código compilado y la depuración. Usar cuando una función R es demasiado lenta y la elaboración de perfiles confirma un cuello de botella, cuando se necesita interactuar con bibliotecas C/C++ existentes, o al implementar algoritmos (bucles, recursión, álgebra lineal) que se benefician del código compilado. locale: es source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: r-packages complexity: advanced language: R tags: r, rcpp, cpp, performance, compiled-code
Añadir Integración con Rcpp
Integrar código C++ en un paquete R usando Rcpp para operaciones críticas de rendimiento.
Cuándo Usar
- La función R es demasiado lenta y la elaboración de perfiles confirma un cuello de botella
- Se necesita interactuar con bibliotecas C/C++ existentes
- Implementar algoritmos que se benefician del código compilado (bucles, recursión)
- Añadir RcppArmadillo para operaciones de álgebra lineal
Entradas
- Obligatorio: Paquete R existente
- Obligatorio: Función R a reemplazar o complementar con C++
- Opcional: Biblioteca C++ externa con la que interactuar
- Opcional: Si usar RcppArmadillo (predeterminado: Rcpp simple)
Procedimiento
Paso 1: Configurar la Infraestructura de Rcpp
usethis::use_rcpp()
Esto:
- Crea el directorio
src/ - Añade
Rcppa LinkingTo e Imports en DESCRIPTION - Crea
R/packagename-package.Rcon@useDynLiby@importFrom Rcpp sourceCpp - Actualiza
.gitignorepara los archivos compilados
Para RcppArmadillo:
usethis::use_rcpp_armadillo()
Esperado: Directorio src/ creado, DESCRIPTION actualizado con Rcpp en LinkingTo e Imports, y R/packagename-package.R contiene la directiva @useDynLib.
En caso de fallo: Si usethis::use_rcpp() falla, crear manualmente src/, añadir LinkingTo: Rcpp e Imports: Rcpp a DESCRIPTION, y añadir #' @useDynLib packagename, .registration = TRUE y #' @importFrom Rcpp sourceCpp al archivo de documentación a nivel de paquete.
Paso 2: Escribir la Función C++
Crear src/my_function.cpp:
#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;
}
Para 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;
}
Esperado: Archivo fuente C++ en src/my_function.cpp con anotación // [[Rcpp::export]] válida y comentarios de documentación estilo roxygen //'.
En caso de fallo: Verificar que el archivo usa #include <Rcpp.h> (o <RcppArmadillo.h> para Armadillo), que la anotación de exportación está en su propia línea directamente encima de la firma de la función, y que los tipos de retorno se corresponden con tipos válidos de Rcpp.
Paso 3: Generar RcppExports
Rcpp::compileAttributes()
devtools::document()
Esperado: R/RcppExports.R y src/RcppExports.cpp generados automáticamente.
En caso de fallo: Revisar los errores de sintaxis C++. Asegurarse de que la etiqueta // [[Rcpp::export]] está presente encima de cada función exportada.
Paso 4: Verificar la Compilación
devtools::load_all()
Esperado: El paquete compila y carga sin errores.
En caso de fallo: Revisar la salida del compilador para detectar errores. Problemas frecuentes:
- Cabeceras de sistema faltantes: Instalar las bibliotecas de desarrollo
- Errores de sintaxis: Los mensajes del compilador C++ apuntan a la línea
- Falta el atributo
Rcpp::dependspara RcppArmadillo
Paso 5: Escribir Pruebas para el Código Compilado
test_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_))
})
Esperado: Las pruebas pasan, confirmando que la función C++ produce resultados idénticos al equivalente R y gestiona los casos límite (vectores vacíos, valores NA) correctamente.
En caso de fallo: Si las pruebas fallan con la gestión de NA, añadir comprobaciones explícitas de NA en el código C++ usando NumericVector::is_na(). Si las pruebas fallan con entrada vacía, añadir una cláusula de guarda para vectores de longitud cero al inicio de la función.
Paso 6: Añadir Script de Limpieza
Crear src/Makevars:
PKG_CXXFLAGS = -O2
Crear cleanup en la raíz del paquete (para CRAN):
#!/bin/sh
rm -f src/*.o src/*.so src/*.dll
Hacer ejecutable: chmod +x cleanup
Esperado: src/Makevars establece los indicadores del compilador y el script cleanup elimina los objetos compilados. Ambos archivos existen en el nivel raíz del paquete.
En caso de fallo: Verificar que cleanup tiene permisos de ejecución (chmod +x cleanup) y que Makevars usa tabulaciones (no espacios) para la sangría si se añaden reglas estilo Makefile.
Paso 7: Actualizar .Rbuildignore
Asegurarse de que los artefactos compilados se gestionan correctamente:
^src/.*\.o$
^src/.*\.so$
^src/.*\.dll$
Esperado: Los patrones de .Rbuildignore evitan que los archivos objeto compilados se incluyan en el tarball del paquete, preservando los archivos fuente y Makevars.
En caso de fallo: Ejecutar devtools::check() y buscar NOTEs sobre archivos inesperados en src/. Ajustar los patrones de .Rbuildignore para excluir solo los archivos .o, .so y .dll.
Validación
-
devtools::load_all()compila sin advertencias - La función compilada produce resultados correctos
- Las pruebas pasan para casos límite (NA, vacío, entradas grandes)
-
R CMD checkpasa sin advertencias de compilación - Los archivos RcppExports están generados y confirmados
- La mejora de rendimiento se confirma con benchmarks
Errores Comunes
- Olvidar
compileAttributes(): Hay que regenerar RcppExports tras modificar archivos C++ - Desbordamiento de enteros: Usar
doubleen lugar deintpara valores numéricos grandes - Gestión de memoria: Rcpp gestiona la memoria automáticamente para los tipos Rcpp; no usar
deletemanualmente - Gestión de NA: C++ no conoce los NA de R. Comprobar con
Rcpp::NumericVector::is_na() - Portabilidad entre plataformas: Evitar características C++ específicas de una plataforma. Probar en Windows, macOS y Linux.
- Falta
@useDynLib: La documentación a nivel de paquete debe incluir@useDynLib packagename, .registration = TRUE
Habilidades Relacionadas
create-r-package- configuración del paquete antes de añadir Rcppwrite-testthat-tests- probar las funciones compiladassetup-github-actions-ci- CI debe tener la cadena de herramientas C++submit-to-cran- los paquetes compilados necesitan verificaciones adicionales de CRAN
GitHub Repository
Frequently asked questions
What is the add-rcpp-integration skill?
add-rcpp-integration is a Claude Skill by pjt222. Skills package instructions and resources that Claude loads on demand, so Claude can perform add-rcpp-integration-related tasks without extra prompting.
How do I install add-rcpp-integration?
Use the install commands on this page: add add-rcpp-integration to Claude Code as a plugin, or clone its repository into your skills directory, then restart Claude so it picks up the skill.
What category does add-rcpp-integration belong to?
add-rcpp-integration is in the Other category, tagged general.
Is add-rcpp-integration free to use?
Yes. add-rcpp-integration is listed on AIMCP and free to install. It runs inside Claude, so no separate service account is required to use the skill itself.
Verwandte Skills
LlamaGuard ist Metas 7-8B-Parameter-Modell zur Moderation von LLM-Eingaben und -Ausgaben in sechs Sicherheitskategorien wie Gewalt und Hassrede. Es bietet eine Genauigkeit von 94-95 % und kann mit vLLM, Hugging Face oder Amazon SageMaker eingesetzt werden. Nutzen Sie diese Skill, um Inhaltsfilterung und Sicherheitsguardrails einfach in Ihre KI-Anwendungen zu integrieren.
Diese Claude Skill unterstützt Entwickler bei der Optimierung von Cloud-Kosten durch Ressourcen-Dimensionierung, Tagging-Strategien und Ausgabenanalysen. Sie bietet einen Rahmen zur Senkung von Cloud-Ausgaben und zur Implementierung von Kosten-Governance für AWS, Azure und GCP. Nutzen Sie sie, wenn Sie Infrastrukturkosten analysieren, Ressourcen richtig dimensionieren oder Budgetvorgaben einhalten müssen.
Diese Claude Skill analysiert Sportwettenmärkte inklusive Handicaps, Over/Unders und Spezialwetten, indem sie historische Trends und situative Statistiken untersucht, um Wertwetten zu identifizieren. Sie liefert strukturierte Markdown-Ausgaben mit umsetzbaren Empfehlungen zu Bildungszwecken. Entwickler sollten dies für Sportwetten-Analysetools nutzen, wobei zu beachten ist, dass es nur zur Unterhaltung/Bildung konzipiert wurde.
Diese Fähigkeit quantisiert LLMs auf 8-Bit- oder 4-Bit-Präzision mittels bitsandbytes und erreicht dabei eine Speicherreduzierung von 50–75 % bei minimalem Genauigkeitsverlust. Sie ist ideal für den Betrieb größerer Modelle mit begrenztem GPU-Speicher oder zur Beschleunigung von Inferenzvorgängen und unterstützt Formate wie INT8, NF4 und FP4. Die Fähigkeit integriert sich in HuggingFace Transformers und ermöglicht QLoRA-Training sowie 8-Bit-Optimierer.
