###Rcpp
1. 为什么使用Rcpp
R作为解释性的语言,缺点就是运行速度慢,特别是在有loop的时候。而编译性的语言在这方面有着自身的优势(先全部编译,然后链接,装载,以后就不用解释了,速度就相对较快)
2. Rcpp的两种植入方式
1).先编写一个cpp文件,然后再R语句中调用这个cpp文件中的函数
这里的cpp文件我们还是使用前面说过的mysweep方法来举例子,转mysweep ,需要注意的是,这里格式中一定要有// [[Rcpp::export]],感觉像是注释没有用,但是少了这句文件就运行不起来。
然后在R语言中如何引用这个函数呢?只需在R文件头加上 library(Rcpp) 和一句调用的语句 sourceCpp(mySweep_cpp.cpp),之后就可以在R中使用cpp函数mysweep_cpp 。关于从cpp到R的过程中数据类型的过度,这里有NumericMatrix,NumericVector等一些类型。很好实现两种语言的对接。
下面是纯R写的sweep函数
比较两中编写方式的速度:
得到的结果为:
可见使用Rcpp能很明显提高loop的速度!
2). 不写cpp文件,直接在R语言中加入cpp语句
和上面的区别不大,但是就是只能在一个cppFunction中定义一个cppfunction。