R找不到Rcpp函数

时间:2017-12-02 21:51:21

标签: r package rstudio rcpp devtools

我构建了一个R package(称为myUtils),它使用cpp文件,位于RStudio之后cpp。我的src文件位于devtools::use_rcpp()目录中,在运行后创建:R,在我的myUtils.R目录下我有一个名为#' myUtils: A package with various functions for my analyses #' #' #' @docType package #' @name myUtils #' @useDynLib myUtils #' @importFrom Rcpp sourceCpp NULL 的文件,这些行:

cpp

这是我的// [[Rcpp::depends(RcppArmadillo, RcppEigen)]] #include <RcppArmadillo.h> #include <RcppEigen.h> using namespace Rcpp; // [[Rcpp::export]] SEXP armaMatMult(arma::mat A, arma::mat B){ arma::mat C = A * B; return Rcpp::wrap(C); } // [[Rcpp::export]] SEXP eigenMatMult(Eigen::MatrixXd A, Eigen::MatrixXd B){ Eigen::MatrixXd C = A * B; return Rcpp::wrap(C); } 文件:

devtools::document()

然后我运行useDynLib(myUtils),将NAMESPACE添加到Build & Reload文件中。然后我运行RccpExports.R,成功完成,并在R目录中创建了cpp文件,其中包含eigenMatMult <- function(A, B) { .Call('_myUtils_eigenMatMult', PACKAGE = 'myUtils', A, B) } 个函数,例如:

eigenMatMult

然后我尝试测试set.seed(1) A <- matrix(rnorm(100), 10, 10) > eigenMatMult(A=A,B=A) Error: could not find function "eigenMatMult" ,但它无法识别:

myUtils::

并且在{{1}}

之前都没有出现

看起来我错过了一些东西,但我无法弄清楚它是什么。

帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

Rcpp Attributes机制本身不会向NAMESPACE文件中的export指令添加函数。我们的示例使用通配符导出所有内容。

因此,如果您的功能不可见,请执行

中的一项或两项
  • 通过:::致电myUtils:::eigenMatMult(A, A)
  • 手动或通过roxygen标签将eigenMatMult添加到导出

答案 1 :(得分:0)

德克说:

通过手工或通过roxygen标签向出口中添加eigenMatMult

如果NAMESPACE是由roxygen2生成的,我们可能不想手工修改:

# Generated by roxygen2: do not edit by hand

因此,让我们为roxygen2添加一个标记,以便它知道将我们的功能自动添加到NAMESPACE文件中。

您的代码示例如下:

// [[Rcpp::export]]
SEXP eigenMatMult(Eigen::MatrixXd A, Eigen::MatrixXd B){
  Eigen::MatrixXd C = A * B;

  return Rcpp::wrap(C);
}

它应该看起来像这样(注意带有//' @export的行):

//' @export
// [[Rcpp::export]]
SEXP eigenMatMult(Eigen::MatrixXd A, Eigen::MatrixXd B){
  Eigen::MatrixXd C = A * B;

  return Rcpp::wrap(C);
}