| RcppVector {Rcpp} | R Documentation |
RcppVector, RcppMatrix and RcppStringVector are
C++ classes defined in Rcpp.h that can
pass vectors (matrices) of R objects of appropriate types to C++ via
the .Call() function interface.
The vector and matrix types are templated and can operate on R types
intger and numeric.
Member functions are provided to query the dimension of the vector or
matrix object, convert it in a corresponding C representation,
and also to convert it into a corresponding STL object.
Usage of RcppVector, RcppMatrix and
RcppStringVector in C++ is fully defined in
Rcpp.h.
As example, consider a call from R to C++ such as
# an R example passing one type of each class to a function
# someFunction in package somePackage
val <- .Call("someFunction",
rnorm(100), # numeric vector
sample(1:10, 5, TRUE) # int vector
search(), # character vector
as.matrix(rnorm(100),10,10), # matrix
PACKAGE="somePackage")
At the C++ level, the corresponding code to assign these parameter to
C++ objects is can be as follows (taken from the C++ source of
RcppExample):
SEXP someFunction(SEXP nvec, SEXP ivec,
SEXP svec, SEXP nmat) {
RcppVector<double> nv(nvec);
RcppVector<int> iv(ivec);
RcppStringVector sv(svec);
RcppMatrix<double> nm(nmat);
}
These C++ objects could then be queried via
int n = nv.size();
int d1 = nm.dim1(), d2 = nm.dim2();
to retrieve, respectively, vector length and matrix dimensions.
Moreover, the stlVector() and stlMatrix() member
functions can be used to convert the objects into STL objects:
vector<int> ivstl = iv.stlVector();
vector< vector< double > > = nm.stlMatrix();
Dominick Samperi wrote most of Rcpp during 2005 and 2006. Dirk Eddelbuettel made some additions, and became maintainer in 2008.
RcppExample, the vignette “RcppAPI”.
# set up some value vector <- (seq(1,9))^2 # call the underlying C++ function result <- RcppVectorExample(vector) # inspect returned object result