【发布时间】:2017-06-25 20:33:32
【问题描述】:
我遵循了迄今为止在本网站或 Dirk、Hadley 或其他人发表的说明中解释的所有程序。但是,由于 cpp11 插件的问题,我在构建包时仍然遇到问题。
我使用了RcppArmadillo.package.skeleton() 函数。我将我的 cpp 文件放在 src 目录中。 NAMESPACE 文件看起来应该包含importFrom(Rcpp, sourceCpp) 行。我还编辑了DESCRIPTION文件,在LinkingTo部分,我添加了RcppEigen和我使用的其他包。我终于在 R 中运行了compileAttributes(verbose=TRUE) 函数,一切看起来都很好。因此,我认为我已经做了我应该做的一切。我还必须提到,当我使用sourceCpp() 在 R 中编译我的代码时,它运行良好并且编译时没有错误!
为了更好地说明我的依赖关系,我将代码的第一块放在这里:
#include <RcppArmadillo.h>
#include <RcppNumerical.h>
#include <RcppArmadilloExtensions/sample.h>
#include <Eigen/LU>
#include <algorithm>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::depends(RcppNumerical)]]
// [[Rcpp::plugins(cpp11)]]
问题是当我构建我的包时,我收到与 cpp11 插件相关的 auto 类型的行的错误和警告。
在此网站上搜索类似帖子后,我得出结论,我必须强制我的 R 编译器使用 c++11,因此我编辑了位于 ~/.R/Makevars 的 Makvars 文件,因为我使用 MAC 我添加了这一行:
CXX=clang++ -std=c++11 到该文件。但是,当我这样做时,这 3 个错误消失了,但生成了 50 个新错误,因为不再识别所有 Armadillo 变量类型,例如 mat、uvec 等。所以我不知道如何解决这个问题。
我认为基本上把 // [[Rcpp::plugins(cpp11)]] 放在应该照顾它,因为新版本的 Rcpp 支持这个插件,可能这就是为什么当我在 R 中运行 sourceCpp 时我没有收到错误并且一切看起来都很好。但我不知道在构建我的包时会发生什么。我的 Rcpp 版本是 0.12.8 。
提前感谢您的任何帮助。
【问题讨论】:
标签: rcpp armadillo r-package rcpp11