Zurück zu Fähigkeiten

add-rcpp-integration

pjt222
Aktualisiert 6 days ago
17 Ansichten
17
2
17
Auf GitHub ansehen
Metatesting

Über

Diese Fähigkeit integriert Rcpp oder RcppArmadillo in ein R-Paket und ermöglicht damit hochleistungsfähigen C++-Code für rechenintensive Aufgaben. Sie führt Entwickler durch die Einrichtung, das Schreiben von C++-Funktionen, das Generieren von RcppExports und das Testen des kompilierten Codes. Nutzen Sie sie, wenn Profiling Engpässe in R-Funktionen aufdeckt, bei der Anbindung an bestehende C/C++-Bibliotheken oder bei der Implementierung von Algorithmen wie Schleifen und linearer Algebra, die von Kompilierung profitieren.

Schnellinstallation

Claude Code

Empfohlen
Primär
npx skills add pjt222/agent-almanac -a claude-code
Plugin-BefehlAlternativ
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternativ
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/add-rcpp-integration

Kopieren Sie diesen Befehl und fügen Sie ihn in Claude Code ein, um diese Fähigkeit zu installieren

Dokumentation

接 Rcpp

入 C++ 於 R 包以速關行。

  • R 函慢、剖證瓶→用
  • 接既有 C/C++ 庫→用
  • 算(環、遞)益於編→用
  • 增 RcppArmadillo 為線代→用

  • :既存 R 包
  • :欲代或補之 R 函
  • :欲接之外 C++ 庫
  • :用 RcppArmadillo 否(默純 Rcpp)

一:設 Rcpp 基

usethis::use_rcpp()

此:

  • src/
  • Rcpp 於 LinkingTo 與 Imports
  • R/packagename-package.R@useDynLib@importFrom Rcpp sourceCpp
  • .gitignore 避編檔

RcppArmadillo:

usethis::use_rcpp_armadillo()

得:src/ 已建,DESCRIPTION 含 Rcpp 於 LinkingTo 與 Imports,R/packagename-package.R@useDynLib

敗:usethis::use_rcpp() 敗→手建 src/、入 LinkingTo: RcppImports: Rcpp 於 DESCRIPTION,入 #' @useDynLib packagename, .registration = TRUE#' @importFrom Rcpp sourceCpp 於包級文。

二:書 C++ 函

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;
}

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;
}

得:C++ 源於 src/my_function.cpp,含有效 // [[Rcpp::export]]//' 註。

敗:驗檔用 #include <Rcpp.h>(Armadillo 用 <RcppArmadillo.h>),出註於函簽前獨行,返型映 Rcpp 有效型。

三:生 RcppExports

Rcpp::compileAttributes()
devtools::document()

得:R/RcppExports.Rsrc/RcppExports.cpp 自生。

敗:察 C++ 語誤。確 // [[Rcpp::export]] 標於各出函上。

四:驗編

devtools::load_all()

得:包編、載而無誤。

敗:察編出。常症:缺系頭→裝開發庫;語誤→C++ 編訊指行;缺 Rcpp::depends 屬於 RcppArmadillo。

五:書測編

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_))
})

得:測過,證 C++ 函果同 R 等且妥處邊例(空向、NA)。

敗:NA 測敗→於 C++ 加 NumericVector::is_na() 之檢。空入測敗→於函首加零長守。

六:增清腳

src/Makevars

PKG_CXXFLAGS = -O2

cleanup 於包根(為 CRAN):

#!/bin/sh
rm -f src/*.o src/*.so src/*.dll

可行:chmod +x cleanup

得:src/Makevars 設編旗,cleanup 去編對。皆於包根。

敗:驗 cleanup 有可行權(chmod +x cleanup),Makevars 用製表(非空)若加 Makefile 規。

七:更 .Rbuildignore

確編產妥處:

^src/.*\.o$
^src/.*\.so$
^src/.*\.dll$

得:.Rbuildignore 紋阻編對檔入包包,存源檔與 Makevars。

敗:行 devtools::check() 察 NOTE 關 src/ 中意外檔。調紋唯排 .o.so.dll

  • devtools::load_all() 編無警
  • 編函出正果
  • 邊例(NA、空、巨)測過
  • R CMD check 過無編警
  • RcppExports 已生且提
  • 性能改以基準證

  • compileAttributes():改 C++ 後須重生 RcppExports
  • 整溢:大數用 doubleint
  • 記理:Rcpp 自理 Rcpp 型;勿手 delete
  • NA 處:C++ 不知 R 之 NA。用 Rcpp::NumericVector::is_na()
  • 跨台:避台專 C++ 特。測於 Windows、macOS、Linux
  • @useDynLib:包級文須含 @useDynLib packagename, .registration = TRUE

  • create-r-package — 增 Rcpp 前包設
  • write-testthat-tests — 測編函
  • setup-github-actions-ci — CI 須有 C++ 工
  • submit-to-cran — 編包需 CRAN 加察

GitHub Repository

pjt222/agent-almanac
Pfad: i18n/wenyan-ultra/skills/add-rcpp-integration
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Verwandte Skills

content-collections

Meta

Diese Skill bietet eine produktionsgetestete Einrichtung für Content Collections – ein TypeScript-first-Tool, das Markdown/MDX-Dateien in typsichere Datensammlungen mit Zod-Validierung umwandelt. Verwenden Sie ihn beim Erstellen von Blogs, Dokumentationsseiten oder inhaltsstarken Vite + React-Anwendungen, um Typsicherheit und automatische Inhaltsvalidierung zu gewährleisten. Er behandelt alles von der Vite-Plugin-Konfiguration und MDX-Kompilierung bis hin zur Deployment-Optimierung und Schema-Validierung.

Skill ansehen

polymarket

Meta

Diese Fähigkeit ermöglicht es Entwicklern, Anwendungen mit der Polymarket-Prognosemärkte-Plattform zu erstellen, einschließlich API-Integration für Handel und Marktdaten. Sie bietet außerdem Echtzeit-Datenstreaming über WebSocket, um Live-Trades und Marktaktivitäten zu überwachen. Nutzen Sie sie zur Implementierung von Handelsstrategien oder zur Erstellung von Tools, die Live-Marktaktualisierungen verarbeiten.

Skill ansehen

creating-opencode-plugins

Meta

Diese Fähigkeit unterstützt Entwickler dabei, OpenCode-Plugins zu erstellen, die in über 25 Ereignistypen wie Befehle, Dateien und LSP-Operationen eingreifen. Sie bietet die Plugin-Struktur, Event-API-Spezifikationen und Implementierungsmuster für JavaScript/TypeScript-Module. Nutzen Sie sie, wenn Sie den Lebenszyklus des OpenCode KI-Assistenten mit benutzerdefinierter ereignisgesteuerter Logik abfangen, überwachen oder erweitern müssen.

Skill ansehen

sglang

Meta

SGLang ist ein hochperformantes LLM-Serving-Framework, das sich auf schnelle, strukturierte Generierung für JSON, Regex und agentenbasierte Workflows unter Verwendung seines RadixAttention-Prefix-Cachings spezialisiert. Es bietet deutlich schnellere Inferenz, insbesondere für Aufgaben mit wiederholten Präfixen, was es ideal für komplexe, strukturierte Ausgaben und Mehrfachdialoge macht. Wählen Sie SGLang gegenüber Alternativen wie vLLM, wenn Sie constrained decoding benötigen oder Anwendungen mit umfangreicher Präfix-Weitergabe entwickeln.

Skill ansehen