In this package vignette, we introduce how to use the C++ header-only library that splines2 contains with the Rcpp package (Eddelbuettel 2013) for constructing spline basis. The introduction is intended for package developers who would like to use splines2 package at C++ level.

Header File and Name Space

Different with the procedure based functions at R level, splines2 provides several spline classes in its C++ interface for ease of usage and maintenance. The implementations use the Armadillo (Sanderson 2016) library with help of RcppArmadillo (Eddelbuettel and Sanderson 2014) and require C++11. We may include the header file named splines2Armadillo.h to get the access to all the classes and implementations in the name space splines2.

B-splines

The BSpline class is for creating B-spline basis.

Constructors

There are mainly three constructors in addition to the default constructor: BSpline().

The first non-default constructor is called when internal knots are explicitly specified.

The second non-default constructor is called when an unsigned integer representing the degree of freedom of the complete spline basis (different with df in the R interface) is specified. Then the number of internal knots is computed as spline_df - degree - 1 and the placement of internal knots uses quantiles of specified x.

The third non-default constructor is explicit and takes a pointer to a base class object. It can be useful when we want to create a new object using the same specification (degree, internal_knots, boundary_knots, etc.) of an existing object.

Function Members

The main methods are

  • basis() for spline basis matrix
  • derivative() for derivatives of spline bases
  • integral() for integrals of spline bases

The specific function signatures are as follows:

In addition, we may set and get the spline specifications through the following setter and getter functions, respectively.

The setter function returns a pointer to the current object so that the specification can be chained for convenience. For example,

M-splines, I-splines, and C-splines

The class MSpline for M-splines, ISpline for I-splines, and CSpline for C-splines have the exactly same constructors and function members with BSpline except there is no publicly available integral() method for CSpline.

Generalized Bernstein Polynomials

The BernsteinPoly class is implemented for the generalized Bernstein polynomials.

Constructors

The main non-default constructor is as follows:

Function Members

Same with BSpline, the main methods are

  • basis() for basis matrix
  • derivative() for derivatives of bases
  • integral() for integrals of bases

The specific function signatures are as follows:

In addition, we may similarly set and get the specifications through the following setter and getter functions, respectively.

The setter function also returns a pointer to the current object.

Reference

Eddelbuettel, Dirk. 2013. Seamless R and C++ Integration with Rcpp. Springer.

Eddelbuettel, Dirk, and Conrad Sanderson. 2014. “RcppArmadillo: Accelerating R with High-Performance C++ Linear Algebra.” Computational Statistics and Data Analysis 71: 1054–63. http://dx.doi.org/10.1016/j.csda.2013.02.005.

Sanderson, Conrad. 2016. “Armadillo: An Open Source C++ Linear Algebra Library for Fast Prototyping and Computationally Intensive Experiments.” Journal of Open Source Software 1: 26.