我正在尝试编译在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()没有任何问题。
答案 0 :(得分:4)
[[Rcpp::depends(...)]]
功能适用于sourceCpp()
等,对于您应使用Imports:
和Depends:
等pp字段来设置软件包的软件包。
我认为现在对RStudio存在轻微的错误/麻烦,因为您可能需要交换DESCRIPTION中的字段以消除第一个警告。但它起作用了。
考虑使用我们提供的功能设置包:RcppArmadillo.package.skeleton()
并从那里开始。
编辑:当然,另一种方法是使用RcppArmadillo加载65个CRAN软件包中的任何一个并在RStudio中构建它然后比较它们的设置(基本上:Depends / Imports和LinkingTo,以及正确的NAMESPACE文件)到你现在拥有的东西,所以看看你缺少什么。