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

时间:2014-05-06 05:29:39

标签: r rstudio rcpp

我正在尝试编译在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);
}

可在此处找到:http://gallery.rcpp.org/articles/simulate-multivariate-normal/

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

RStudio提供以下错误:

  

==&GT; RCPP :: compileAttributes()

     

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

     

==&GT; Rcmd.exe INSTALL --no-multiarch --with-keep.source Choice38

     
      
  • 安装到图书馆&#39; F:/ Program Files / R / R-3.1.0 / library&#39;
  •   
  • 安装包&#39; Choice38&#39; ... g ++ -m64 -I&#34; F:/PROGRA~2/R/R-31~1.0/include" -DNDEBUG -I&#34; F:/ Program Files / R / R-3.1.0 / library / Rcpp / include&#34;   -I&#34; d:/ RCompile / CRANpkg / extralibs64 /本地/包括&#34; -O2 -Wall -mtune = core2 -c RcppExports.cpp -o RcppExports.o   ** libs RcppExports.cpp:9:1:错误:&#39; arma&#39;没有命名类型RcppExports.cpp:在函数&#39; SEXPREC * Choice38_rmvrnorm_arma(SEXP,   SEXP,SEXP)&#39;:RcppExports.cpp:16:40:错误:&#39; arma&#39;未被宣布   此范围RcppExports.cpp:16:50:错误:模板参数1是   无效的RcppExports.cpp:16:58:错误:在&#39; mu&#39;之前的预期初始化程序   RcppExports.cpp:17:50:错误:参数1中的类型/值不匹配   &#39;模板结构的模板参数列表   RCPP ::特点:: input_parameter&#39; RcppExports.cpp:17:50:错误:
      期待一种类型,得到了arma&#39; RcppExports.cpp:17:58:错误:预期   初始化程序之前的sigma&#39; RcppExports.cpp:18:9:错误:&#39; arma&#39;不是   一个类或命名空间RcppExports.cpp:18:19:错误:预期&#39 ;;&#39;之前   &#39; __结果&#39; RcppExports.cpp:19:9:错误:&#39; __结果&#39;未被宣布   此范围包含: * [RcppExports.o]错误1警告:运行命令   &#39; make -f&#34; F:/PROGRA~2/R/R-31~1.0/etc/x64/Makeconf" -F   &#34; F:/PROGRA~2/R/R-31~1.0/share/make/winshlib.mk"   SHLIB_LDFLAGS =&#39; $(SHLIB_CXXLDFLAGS)&#39; SHLIB_LD =&#39; $(SHLIB_CXXLD)&#39;   SHLIB =&#34; Choice38.dll&#34; WIN = 64 TCLBIN = 64 OBJECTS =&#34; RcppExports.o   rmvrnorm_arma.o&#34;&#39;状态为2 ERROR:包的编译失败   &#39; Choice38&#39;
  •   
  • 删除&#39; F:/ Program Files / R / R-3.1.0 / library / Choice38&#39;
  •   
     

退出状态1.

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

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

  

Rcpp :: sourceCpp(&#39; rmvrnorm_arma.cpp&#39;)警告信息:In   normalizePath(path.expand(path),winslash,mustWork):
  path [1] =&#34; F:/ Documents / BoxSync / Choice Project / R Scripts / Rcpp   Scripts / RcppArmadillo MCMC / Choice38 / src /../ inst / include&#34;:系统   找不到指定的路径

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

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

1 个答案:

答案 0 :(得分:4)

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

我认为现在对RStudio存在轻微的错误/麻烦,因为您可能需要交换DESCRIPTION中的字段以消除第一个警告。但它起作用了。

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

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