Skip to content

Chia202/toyPackage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

开发 R 包

假设我们需要开发一个使用 RcppRcppArmadilloOPENMP 的 R 包,并且把 c++ 函数包装成 R 函数,我们需要准备以下文件:

toyPackage           # 包名,也是根目录名
├── man              # 文档目录,后续可以自动生成
├── src
│   ├── Makevars     # OPENMP 的配置文件
│   ├── Makevars.win # Windows 的配置文件
│   └── code.cpp     # 源代码文件
├── R                # R 代码目录
│   └── code.R
├── DESCRIPTION      # 包的描述文件
├── NAMESPACE        # 包的命名空间,可以自己写
└── README.md        # 包的说明文件

我们用一个具体的例子来说明,假设我们希望计算一个 $m \times n$ 矩阵的元素和,我们需要做的事情:

  1. DESCRIPTION 中添加包的描述信息(注意 R 包的命名规则)
  2. NAMESPACE 中添加包的命名空间信息
  3. src/code.cpp 中编写 c++ 函数
  4. R/code.R 中编写 R 函数调用 c++ 函数

做好以后,在根目录下运行如下脚本:

R -e "Rcpp::compileAttributes()" # 编译 `c++` 函数
R -e "roxygen2::roxygenise()"    # 生成 `man` 目录下的 `code.Rd` 文件

关于 *.Rd 说明文件:如果实现了 Rcpp 函数 sum_matrix()R 函数 sum.matrix(),并且后者调用前者实现,假如不希望导出 Rcpp 函数,也不希望导出 Rcpp 函数的说明文档,那么不要在 NAMESPACE 中导出 Rcpp 函数,也不要在 Rcpp 函数声明前加上 roxygen2 注释,只要 // [[Rcpp::export]] 注释即可。

这样就生成了 man 目录下的 code.Rd 文件,然后编译安装 R 包:

cd .. ; R CMD build toyPackage
R CMD check toyPackage_0.1.0.tar.gz
R CMD INSTALL toyPackage_0.1.0.tar.gz

这样就安装好了 R 包,可以测试一下:

R -e "library(toyPackage) ; sum.matrix(matrix(1:10, 2, 5))"

当提交到 GitHub 以后,可以通过 remotes::install_github 安装 R 包:

remotes::install_github("chia202/toyPackage")

About

简易 R 包开发

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors