Create a cpp template to get started.
template(file = NULL)
Optional name of cpp file.
This function generates a C++ template with a header and include statement. Here is a brief overview of the C++ syntax used to code the objective function. For a full reference see the Doxygen documentation (more information at the package URL).
Macros to read data and declare parameters:
Template Syntax | C++ type | R type |
DATA_VECTOR(name) | vector<Type> | vector |
DATA_MATRIX(name) | matrix<Type> | matrix |
DATA_SCALAR(name) | Type | numeric(1) |
DATA_INTEGER(name) | int | integer(1) |
DATA_FACTOR(name) | vector<int> | factor |
DATA_IVECTOR(name) | vector<int> | integer |
DATA_SPARSE_MATRIX(name) | Eigen::SparseMatrix<Type> | dgTMatrix |
DATA_ARRAY(name) | array<Type> | array |
PARAMETER_MATRIX(name) | matrix<Type> | matrix |
PARAMETER_VECTOR(name) | vector<Type> | vector |
PARAMETER_ARRAY(name) | array<Type> | array |
PARAMETER(name) | Type | numeric(1) |
Basic calculations:
Template Syntax | Explanation |
REPORT(x) | Report x back to R |
ADREPORT(x) | Report x back to R with derivatives |
vector<Type> v(n1); | R equivalent of v=numeric(n1) |
matrix<Type> m(n1,n2); | R equivalent of m=matrix(0,n1,n2) |
array<Type> a(n1,n2,n3); | R equivalent of a=array(0,c(n1,n2,n3)) |
v+v,v-v,v*v,v/v | Pointwise binary operations |
m*v | Matrix-vector multiply |
a.col(i) | R equivalent of a[,,i] |
a.col(i).col(j) | R equivalent of a[,j,i] |
a(i,j,k) | R equivalent of a[i,j,k] |
exp(v) | Pointwise math |
m(i,j) | R equivalent of m[i,j] |
v.sum() | R equivalent of sum(v) |
m.transpose() | R equivalent of t(m) |
Some distributions are available as C++ templates with syntax close to R's distributions:
Function header | Distribution |
dnbinom2(x,mu,var,int give_log=0) | Negative binomial with mean and variance |
dpois(x,lambda,int give_log=0) | Poisson distribution as in R |
dlgamma(y,shape,scale,int give_log=0) | log-gamma distribution |
dnorm(x,mean,sd,int give_log=0) | Normal distribution as in R |