extendr conventions for exposing a Rust core to R: extendr macros and module registration, Robj type mapping, NA handling, rextendr builds, R package scaffolding, and CRAN compliance. Load when generating or reviewing extendr R bindings for a Rust library.
Installs into .claude/skills of the current project.
Are you the author of Extendr Bindings?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/goldziher-extendr-bindings)
---
name: extendr-bindings
description: "extendr conventions for exposing a Rust core to R: extendr macros and module registration, Robj type mapping, NA handling, rextendr builds, R package scaffolding, and CRAN compliance. Load when generating or reviewing extendr R bindings for a Rust library."
---
- Use `extendr` crate for Rust-R interop. `#[extendr]` macro on functions, `extendr_module!` for registration.
- Type mapping: `Robj` for generic R objects, `Doubles`, `Integers`, `Strings`, `List` for typed access.
- Return `Result<T, extendr_api::Error>` for R error propagation. Use `.into()` for Rust-to-R conversion.
- NA handling: use `Rfloat::na()`, `Rint::na()` for missing values. Check with `.is_na()` before operations.
- Build with `rextendr::document()` in R for development, `cargo build --release` for production.
- Package integration: use `usethis::use_extendr()` for scaffolding. Maintain `src/rust/` in R package.
- Test R-side with `testthat`, Rust-side with standard `#[test]`. Use `rextendr::test()` for integration.
- CRAN compliance: `R CMD check --as-cran` must pass. No compiler warnings. Vendor Rust dependencies.
- Keep R wrapper functions thin — heavy computation in Rust, R provides user-facing API with roxygen2 docs.
- Anti-patterns: ignoring NA values, allocating R objects in Rust threads, panics in `#[extendr]` functions.