【问题标题】:Moving from sourceCpp to a package with RcppArmadillo从 sourceCpp 移动到带有 RcppArmadillo 的包
【发布时间】:2016-06-24 19:07:08
【问题描述】:

这与关于从 sourceCpp 迁移到带有 Rcpp Moving from sourceCpp to a package w/Rcpp 的包的帖子有些相关。但是,我在 Mac OS X 10.10.4 上使用 RcppArmadillo,并且无法让包正常工作。与sourceCpp配合使用的文件如下:

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

using namespace Rcpp;

// [[Rcpp::export]]
arma::mat cholcalcCpp(arma::mat& SS, arma::umat& Aadj){

  int p = SS.n_rows;
  arma::mat L(p,p);
  arma::mat D(p,p);

  L = arma::eye(p,p);
  D = arma::eye(p,p);

  return (L*sqrt(D));
}

尝试使用 R Studio 使用 Project>Create Project>Package w/Rcpp 创建新项目也不起作用,因为我一直收到错误消息,提示无法识别命令 arma。我尝试在 RccpExports.cpp 文件中添加#include &lt;RcppArmadillo.h&gt;,但每次我尝试构建和重新加载时,Rstudio 都会删除该行。谁能建议我如何从 .cpp 文件转到 RccpArmadillo 包?谢谢。

【问题讨论】:

  • DESCRIPTION 文件中有LinkingTo: Rcpp, RcppArmadillo 吗?
  • 你也可以从RcppArmadillo.package.skeleton()开始。
  • 感谢@Coatless 和@Dirk。我已经设法让它构建和加载,但现在当我尝试从 R 调用函数时出现以下错误:Error in .Primitive(".Call")(&lt;pointer: 0x0&gt;, S, adj) : NULL value passed as symbol address。知道是什么原因造成的吗?
  • 我设法通过从头开始重写整个包并使用不同的名称来修复错误Error in .Primitive(".Call")(&lt;pointer: 0x0&gt;, S, adj) : NULL value passed as symbol address。我不完全确定它为什么会起作用。

标签: r rcpp armadillo


【解决方案1】:

有几件事可能是错误的。首先,您确实需要修改DESCRIPTION 文件以包含LinkingTo: Rcpp, RcppArmadillo,并确保#include &lt;RcppArmadillo.h&gt; 存在于/src 目录中的每个.cpp 文件中。您还需要包含两个Makevars 文件。

Makevars.winMakevars 与:

PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)

有关设置 RStudio 以使用 RcppArmadillo 作为包的完整演练,请参阅:

http://thecoatlessprofessor.com/programming/setting-up-rstudio-to-work-with-rcpparmadillo/

【讨论】:

    【解决方案2】:

    这个错误基本上是你的:

    尝试使用 R Studio 通过 Project>Create Project>Package w/Rcpp 创建新项目也不起作用

    没有人说过“带有 Rcpp 的包”与“带有 RcppArmadillo 的包”相同。您只是误解了 RStudio 为您提供的服务。

    CRAN 上有超过 200 个软件包使用 RcppArmadillo。有时最容易复制其中一个,将其剥离并从以这种方式创建的框架开始。当然,还有一个更简单且记录在案的方法:使用我们为这个用例编写的RcppArmadilllo.package.skeleton() 函数:为 RcppArmadillo 创建一个基本(工作)包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      相关资源
      最近更新 更多