如何使用 RcppArmadillo 在 Rstudio 中构建 Rcpp 包?

coa*_*ess 0 r rcpp rstudio

我正在尝试编译一个在 RStudio 中使用 RcppArmadillo 的 Rcpp 包。我只是想编译:

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace Rcpp;

// Implementation of MASS' rmvrnorm()

// [[Rcpp::export]]
arma::mat rmvrnorm_arma2(int n, arma::vec mu, arma::mat sigma) {
   int ncols = sigma.n_cols;
   arma::mat Y = arma::randn(n, ncols);
   return arma::repmat(mu, 1, n).t() + Y * arma::chol(sigma);
}
Run Code Online (Sandbox Code Playgroud)

在这里找到:http : //gallery.rcpp.org/articles/simulate-multivariate-normal/

我已将文件 rmvrnorm_arma.cpp 放在 /src/ 目录中。

RStudio 提供以下错误:

==> Rcpp::compileAttributes()

警告消息:使用 Rcpp::depends 属性引用以下包,但未在包描述文件的 Depends 和 LinkingTo 字段中列出:RcppArmadillo

==> Rcmd.exe INSTALL --no-multiarch --with-keep.source Choice38

  • 安装到库“F:/Program Files/R/R-3.1.0/library”
  • 安装包'Choice38' ... g++ -m64 -I"F:/PROGRA~2/R/R-31~1.0/include" -DNDEBUG -I"F:/Program Files/R/R-3.1.0 /library/Rcpp/include" -I"d:/RCompile/CRANpkg/extralibs64/local/include" -O2 -Wall -mtune=core2 -c RcppExports.cpp -o RcppExports.o ** libs RcppExports.cpp:9: 1:错误:'arma' 未命名类型 RcppExports.cpp:在函数 'SEXPREC* Choice38_rmvrnorm_arma(SEXP, SEXP, SEXP)':RcppExports.cpp:16:40:错误:'arma' 未在此范围内声明RcppExports.cpp:16:50: 错误: 模板参数 1 无效 RcppExports.cpp:16:58: 错误: 'mu' 之前的预期初始化程序 RcppExports.cpp:17:50: 错误: 模板中参数 1 的类型/值不匹配'模板结构 Rcpp::traits:: 的参数列表input_parameter' RcppExports.cpp:17:50: 错误:
    预期类型,得到 'arma' RcppExports.cpp:17:58: 错误:'sigma' 之前的预期初始值设定项 RcppExports.cpp:18:9: 错误:'arma' 不是类或命名空间 RcppExports.cpp:18:19 :错误:预期';' 在 '__result' RcppExports.cpp:19:9 之前:错误:'__result' 未在此范围内声明 make:* [RcppExports.o] 错误 1 ​​警告:运行命令 'make -f "F:/PROGRA~2/R /R-31~1.0/etc/x64/Makeconf" -f "F:/PROGRA~2/R/R-31~1.0/share/make/winshlib.mk" SHLIB_LDFLAGS='$(SHLIB_CXXLDFLAGS)' SHLIB_LD=' $(SHLIB_CXXLD)' SHLIB="Choice38.dll" WIN=64 TCLBIN=64 OBJECTS="RcppExports.o rmvrnorm_arma.o"' 状态为 2 错误:程序包“Choice38”编译失败
  • 删除“F:/Program Files/R/R-3.1.0/library/Choice38”

以状态 1 退出。

我不知道为什么 Rcpp / Rstudio 拒绝注意 rmvrnorm_arma 的 cpp 文件顶部的包含和依赖关系语句

如果我尝试使用源加载 .cpp,我在第一次尝试加载时收到以下错误:

Rcpp::sourceCpp('rmvrnorm_arma.cpp') 警告消息:在 normalizePath(path.expand(path), winslash, mustWork) 中:
path[1]="F:/Documents/BoxSync/Choice Project/R Scripts/Rcpp Scripts /RcppArmadillo MCMC/Choice38/src/../inst/include": 系统找不到指定的路径

在第二次尝试加载它时,源被拾取。

在开始在 Rstudio 中以 rcpp 包模式进行开发之前,我对 sourceCpp() 没有任何问题。

Dir*_*tel 5

[[Rcpp::depends(...)]]功能适用于sourceCpp()等,对于您应该使用的包Imports:Depends:等 pp 字段来设置包。

我相信 RStudio 现在存在小错误/麻烦,因为您可能需要交换描述中的字段以消除第一个警告。但它的工作方式不同。

考虑使用我们提供的功能设置一个包:RcppArmadillo.package.skeleton()并从那里开始。

编辑:当然,另一种方法是使用 RcppArmadillo 加载 65 个 CRAN 包中的任何一个并在 RStudio 中构建它,然后比较它们的设置(基本上:Depends/Imports 和 LinkingTo,以及正确的 NAMESPACE 文件)到你目前拥有什么,所以看看你缺乏什么。