R包编译时如何自动向NAMESPACE添加RcppParallel所需配置
原因说明
devtools::document() 依赖roxygen2注解生成NAMESPACE文件,你仅在DESCRIPTION的Imports字段声明依赖RcppParallel,只是告诉R安装你的包时需要同步安装这个依赖,并没有明确告诉roxygen2你需要导入RcppParallel的RcppParallelLibs函数,因此不会自动生成对应的importFrom条目。
解决方案
你只需要做一处修改即可省略手动修改NAMESPACE的步骤:
- 在你包的
R/目录下,找到包级别的注解文件(一般命名为{你的包名}-package.R,如果没有就新建一个),添加一行roxygen2注解:
#' @importFrom RcppParallel RcppParallelLibs NULL
- 确认你的DESCRIPTION文件中存在以下配置(roxygen2默认生成,一般不用手动改),确保开启了NAMESPACE自动生成能力:
Roxygen: list(roclets = c("collate", "namespace", "rd"))
修改完成后,你可以直接按以下流程执行编译安装,不需要再手动修改NAMESPACE:
- 运行
Rcpp::compileAttributes() - 运行
devtools::document(),此时会自动把importFrom(RcppParallel, RcppParallelLibs)写入NAMESPACE - 运行
devtools::install("MyPackage",quick = T,upgrade="never")
额外最佳实践:可以在你用到RcppParallel的cpp文件头部添加
// [[Rcpp::depends(RcppParallel)]]声明,避免编译时找不到对应头文件。
内容的提问来源于stack exchange,提问作者Ding Li
相关产品推荐
相关产品推荐

