R语言之使用C++开发R包
引言
作为一名R的忠实用户,我深深的体会到了R作为利剑般的简捷实用性,但是随着统计模型越来越复杂,数据量越来越大,我也深切的感受到效率变成了这门语言的瓶颈!
于是乎有了Rcpp横空出世,Rcpp作为R与C++无缝衔接的接口,它让我们享受到了C++的高性能与R的简洁实用。
当然对于大多数的R用户都不会使用Rcpp,再加上R本身的小众、效率慢,这也可能导致了R本身发展的很慢!!!当然我们希望R以后做的越来越好。
下面我简单的赘述一下当时学习Rcpp的简单历程:
- Rcpp中简单操作数据各种数据结构数据类型的资料
- C++强大的矩阵库方便我们调用arma
- 为了熟练Rcpp,C++的背景知识我们肯定也要了解,比如数组、指针、OOP、STL等等。这也许就是限制统计人的一个地方吧!
关于Rcpp就说到这了,有问题的同学我们可以互相交流!!!
使用Rcpp开发R包
因为牵涉到并行计算,R作为底层写出的代码在并行计算中又较慢,所以想把Rcpp写出来的代码放到并行计算中实现高性能计算,但是Rcpp编译的函数无法传入到主流的并行计算包。我们必须把Rcpp编译的函数写到包里,创建新包,再加载包,这样Rcpp编译的函数就可以传到并行计算中了。
下面我来说一下创建包的方法:
library(Rcpp)
getwd()
setwd("E:/packages")
##因为包中的函数 depend RcppArmadillo
RcppArmadillo::RcppArmadillo.package.skeleton("jis")
setwd("E:/packages/jis")
Rcpp::compileAttributes()
setwd("E:/packages")
library(devtools)
check("jis")
build("jis")
install.packages("E:/packages/jis_1.0.tar.gz",repos = NULL,
type = "source")
最后欢迎有问题有想法的同学来交流!!!