Skip to content

Tools to Make Developing R Packages Interfacing with C Easier

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md
Notifications You must be signed in to change notification settings

DavisVaughan/cbuild

Repository files navigation

cbuild

R build status Travis build status Codecov test coverage

The goal of cbuild is to provide tools for working with C both interactively and when constructing an R package. The two broad goals are:

  • Provide a way to interactively source C code into your R session. See source_function() and source_code() to get started.

  • Provide an automatic registration system for R package developers that use C, see process_attributes(). It can automatically generate the init.c file for you, using a comment system similar to Rcpp::export. For example, the following would generate an entry for the C function fn() in init.c, and generate the glue code to export it as an R routine named fn, which you could call from the R side with .Call(fn, 1):

    // [[ export() ]]
    SEXP fn(SEXP x) {
      return x;
    }
    

Installation

You can install the development version from GitHub with:

# install.packages("devtools")
devtools::install_github("DavisVaughan/cbuild")

Examples

library(cbuild)

The easiest way to get started is with source_function(), which allows you to source a C function from text. It automatically includes R.h and Rinternals.h for you to use.

fn <- source_function("
  SEXP fn(SEXP x) {
    return x;
  }
")

fn(1)
#> [1] 1

From there, you can use source_code() to source larger chunks of code. Tag functions that you want to export with // [[ export() ]].

fns <- source_code("
  static SEXP helper(SEXP x) {
    return x;
  }
  
  // [[ export() ]]
  SEXP fn1(SEXP x) {
    return helper(x);
  }
  
  // [[ export() ]]
  SEXP fn2(SEXP x, SEXP y) {
    double result = REAL(x)[0] + REAL(y)[0];
    return Rf_ScalarReal(result);
  }
")

fns$fn1(1)
#> [1] 1

fns$fn2(1, 2)
#> [1] 3

If you have a full file to source, you can use source_file().

About

Tools to Make Developing R Packages Interfacing with C Easier

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published