准备工作(安装程序包并配置环境变量):
R软件:https://www.r-project.org/
对应的Rtools:https://cran.r-project.org/bin/windows/Rtools/
Miktex:https://miktex.org/
R需要安装 Rcpp 和 RcppArmadillo程序包:
https://cran.r-project.org/web/packages/Rcpp/index.html
https://cran.r-project.org/web/packages/RcppArmadillo/index.html
(也可通过install.packages('Rcpp') 和 install.packages('RcppArmadillo')安装)
建立骨架包
在R中运行如下命令生成基于Rcpp的R包骨架(不支持并行)
library(Rcpp)
Rcpp.package.skeleton( "Test" )
getwd()
Test保存在getwd()所示的文件夹下, 有 man, R, src三个文件夹, 以及DESCRIPTION以及 NAMESPACE 以及 Read-and-delete-me 三个文本文件,这个三个文件没有任何扩展名。
man下面, 保存的是所有R函数以及R程序包的帮助文件文件, 遵循是Latex格式。需要逐项填写
R下面, 保存的是R函数的文件, 每个R函数单独一个文件
src下面, 放的是cpp文件, 即c++的源文件
默认的情况下,
man文件夹下, 会有 rcpp_hello_world.Rd 文件,
R文件夹下, 会有RcppExports.R文件
src 文件夹下, 会有 rcpp_hello_world.cpp 和 RcppExports.cpp两个C++源文件
这些文件在本例中均可以删除。
或者在R中运行如下命令生成基于RcppArmadillo的R包骨架(支持并行)
library(RcppArmadillo)
RcppArmadillo.package.skeleton("Test")
getwd()
默认情况下,与Rcpp相比,RcppArmadillo会在src文件夹下多生成Makevars和Makevars.win,这两个文件不需要修改,其他操作与Rcpp相同。
改写C++代码
源代码:实现从1到n的加法
#include <iostream>
#include <omp.h>
using namespace std;
int get_sum(int n) {
int sum = 0;
#pragma omp parallel for
for(int i = 0; i < n; i++) {
sum += i;
}
return sum;
}