一个最简单创建R包的流程。
安装并载入devtools包和roxygen2包。devtools包提供了一些包的检查、安装和打包的基本工具。roxygen2包则使得书写R帮助文档变得轻松简单。如果习惯使用Emacs,可以结合ESS建立R包,可以将R代码和帮助文档有效组合在一起,便于管理。当然,也可以使用Rstudio。
library('devtools')
library('roxygen2')
如果使用了Rcpp或者相关的包,比如RcppArmadillo,需要格外设置。所有cpp代码都写在src文件夹下。
首先,执行:
use_rcpp()
其次,在DESCRIPTION
中添加依赖或者需要链接的包名称,比如:
Encoding: UTF-8
Imports:
Rcpp
LinkingTo:
Rcpp,
RcppArmadillo
之后,在包的R/
目录下,添加一个文件RcppChk.R
(文件名称自定),并写入:
#' @useDynLib my-pkg-name, .registration = TRUE
#' @importFrom Rcpp sourceCpp
NULL
注意,修改my-pkg-name
为自己的包名称。
然后,在包的src/
目录下,添加一个文件registerDynamicSymbol.c
(文件名称自定),并写入:
// RegisteringDynamic Symbols
#include <R.h>
#include <Rinternals.h>
#include <R_ext/Rdynload.h>
void R_init_markovchain(DllInfo* info) {
R_registerRoutines(info, NULL, NULL, NULL, NULL);
R_useDynamicSymbols(info, TRUE);
}
最后,可能需要在~/.R/Makevars
文件下添加:
# Settings from /etc/R/Makeconf with "non-portable flag(s):"
# ‘-Wdate-time’ ‘-Werror=format-security’ ‘-Wformat’ replaced by -Wall -pedantic
# and without -fdebug-prefix-map=...
CFLAGS = -g -O2 -Wall -pedantic -fstack-protector-strong -D_FORTIFY_SOURCE=2 $(LTO)
CXXFLAGS = -g -O2 -Wall -pedantic -fstack-protector-strong -D_FORTIFY_SOURCE=2 $(LTO)
CXX98FLAGS = -g -O2 -Wall -pedantic -fstack-protector-strong -D_FORTIFY_SOURCE=2
CXX11FLAGS = -g -O2 -Wall -pedantic -fstack-protector-strong -D_FORTIFY_SOURCE=2
CXX14FLAGS = -g -O2 -Wall -pedantic -fstack-protector-strong -D_FORTIFY_SOURCE=2
load_all()
其中import
栏目,在源代码中使用了哪些包,需要逐步在import项目中添加和修改。
document()
check()
## 跨平台check
rhub::check_on_windows()
install()
.tar.gz
压缩文件build()
$ R CMD build MyPkg
$ R CMD check MyPkg.tar.gz
检查通过后,Building and checking R source packages for Windows.手动上传MyPkg.tar.gz
。
或者
devtools::check_win_release()
2023年06月05日