Home

Awesome

<!-- README.md is generated from README.Rmd. Please edit that file -->

simplercpp

<!-- badges: start -->

<!-- badges: end -->

simplercpp is a small demo package incorporating C++ code via Rcpp

This is one of a series of small demo packages for
calling other languages from R:

Rough comparison of .C(), .Call(), {Rcpp} (and .Fortran())

.C().Call()Rcpp
OverviewNo real understanding of R objectsNeed to understand SEXP macros & internalsC++ classes hide the complexity of the SEXP internals
What code?Basic C code. Numeric calcs.Complex C code. Can manipulate R objects from CComplex C and C++ code involving numerics and R objects
ProsSimple to understand and useSimple. No unnecessary copying.Great documentation. Wrapping of R objects very intuitive.
ConsToo simple for most interesting thingsNeed to understand SEXP & R internals
ConsPerforms copying of data to call functions
Demo R package{simplec}{simplecall}{simplercpp}
Compiled size17 kB17 kB92 kB (stripping can bring this down: see issue1)
.Fortran()
OverviewNo real understanding of R objects
What code?Basic Fortran code. Numeric calcs.
ProsSimple to understand and use
ConsToo simple for most interesting things
ConsPerforms copying of data to call functions
ConsNeed to know Fortran!
Demo R package{simplefortran}
Compiled size17 kB

Installation

You can install from GitHub with:

# install.package('remotes')
remotes::install_github('coolbutuseless/simplercpp)

What’s in the box?

Package contains 2 C++ functions, and 2 functions in R (auto-generated by Rcpp) which call the C functions using Rcpp (which uses .Call()).

C functionR function
NumericVector add_rcpp(NumericVector x, NumericVector y)add_rcpp(x, y)
NumericVector mul_rcpp(NumericVector x, NumericVector y)mul_rcpp(x, y)

What’s in the R functions?

<!-- end list -->
#' Add 2 numeric vectors
#'
#' @param x,y numeric vectors
#'
#' @return numeric vector
#'
add_rcpp <- function(x, y) {
    .Call(`_simplercpp_add_rcpp`, x, y)
}

What’s in the C functions?

<!-- end list -->
//' Add 2 numeric vectors
//'
//' @param x,y numeric vectors
//'
//' @return numeric vector
//'
// [[Rcpp::export]]
NumericVector add_rcpp(NumericVector x, NumericVector y) {
  return(x + y);
}

What does the C function look like in R?

<!-- end list -->
simplercpp:::`_simplercpp_add_rcpp`
#> $name
#> [1] "_simplercpp_add_rcpp"
#> 
#> $address
#> <pointer: 0x7f912ed2c220>
#> attr(,"class")
#> [1] "RegisteredNativeSymbol"
#> 
#> $dll
#> DLL name: simplercpp
#> Filename:
#>         /Library/Frameworks/R.framework/Versions/4.0/Resources/library/simplercpp/libs/simplercpp.so
#> Dynamic lookup: FALSE
#> 
#> $numParameters
#> [1] 2
#> 
#> attr(,"class")
#> [1] "CallRoutine"      "NativeSymbolInfo"

Resources

Acknowledgements