Rcpp和RcppArmadillo创建R语言包的实现方式
程序员文章站
2022-03-23 14:05:55
目录1. 预先准备源文件示例func.cpp头文件示例test_h.h2. 创建r包步骤新建r packager包的文件结构修改description文件3. c++11标准问题1. 预先准备wind...
1. 预先准备
windows下需要安装rtools,r中装好rcpp和rcpparmadillo。创建c++源文件func.cpp
,自定义头文件test_h.h
。
源文件示例func.cpp
// [[rcpp::depends(rcpparmadillo)]] // [[rcpp::plugins(cpp11)]] #include <rcpparmadillo.h> #include <vector> #include "./test_h.h" using namespace rcpp; using namespace std; // using namespace arma; // [[rcpp::export]] robject func(){ arma::cube a(3,4,5,arma::fill::randu); std::cout<<condit<<std::endl; return wrap(a); }
// [[rcpp::depends(rcpparmadillo)]]
:用于指明需要使用rcpparmadillo。
// [[rcpp::plugins(cpp11)]]
:指明需要使用c++11。
#include "./test_h.h"
:表示使用第三方头文件。第三方头文件需要用双引号""
包括起来,并加上.h
。./
表示在当下文件夹(src)下搜寻文件。
// using namespace arma;
不一定有用。如果要用armadillo的数据结构,在其之前需指明arma::
。
func()
函数将可以直接在r中调用。
头文件示例test_h.h
#include <iostream> #define condit 1000
2. 创建r包步骤
新建r package
选择package w/rcpp, 并添加源文件。或者建立包以后,手动复制到src文件夹下。
r包的文件结构
修改description文件
将rcpparmadillo添加进imports和linkingto中。
package: rcpppacktest type: package title: what the package does (title case) version: 0.1.0 author: who wrote it maintainer: the package maintainer <yourself@somewhere.net> description: more about what it does (maybe more than one line) use four spaces when indenting paragraphs within the description. license: what license is it under? encoding: utf-8 lazydata: true imports: rcpp (>= 0.12.11), rcpparmadillo linkingto: rcpp, rcpparmadillo
build & reload 建立包
3. c++11标准问题
如果要使用c++11标准,第一种方法是在makevars文件中添加如下代码:
cxx = g++-4.8.1 pkg_cxxflags = -std=c++11
第二种方法是在.cpp文件前添加// [[rcpp::plugins(cpp11)]]
以上就是rcpp和rcpparmadillo创建r包实现方式的详细内容,更多关于rcpp和rcpparmadillo创建r包的资料请关注其它相关文章!