我感觉这个包最重要的部分其实就是两个文件,Rcpp.h和Rcpp.cpp。看起来这个包主要是为写C++语句服务的,里面没有多少R语句。在那两个文件中定义了一些类,这给R与C++的交互提供了很多方便。举个例子来说,我现在将R中的一个向量传送到C++中,然后在C++中把这个向量的首尾两个元素对调,然后再传回给R。这段代码只需下面几行:
#include "Rcpp.h" <br />
#include "Rcpp.cpp" <br />
<br />
RcppExport SEXP ans(SEXP vector) <br />
{ <br />
RcppVector<double> vec(vector); <br />
int n=vec.size(); <br />
double temp=vec(n-1); <br />
vec(n-1)=vec(0); <br />
vec(0)=temp; <br />
RcppResultSet rs; <br />
rs.add("result",vec); <br />
return rs.getReturnList(); <br />
}
用Rtools编译成dll后就可以在R中调用了。
上面代码中的RcppVector是Rcpp.h和Rcpp.cpp中定义好的一个类,专门用来接受R中的向量,而且通过定义好的“()”运算符,可以使这个类的对象像数组一样进行下标操作。
RcppResultSet也是一个定义好的类,通过add()函数和getReturnList()函数,可以将大部分C++中的数据以list的方式返回给R。