RCPP功能不能由R
问题描述:
找到我建立一个R
package
(称为myUtils
),它使用一个文件cpp
,在RStudio
以下Hadley's manual。我cpp
文件驻留在src
目录,运行后创建:devtools::use_rcpp()
,我R
目录下我有一个名为myUtils.R
文件,用这些行:RCPP功能不能由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::
之前,当出现看起来像我失去了一些东西,但我无法弄清楚它是什么。
帮助将不胜感激。
答
的RCPP属性机制在NAMESPACE
文件本身不添加函数的出口指令。我们的示例使用通配符导出所有内容。
所以,如果你的函数是不可见的,做
- 通话的一方或双方通过
:::
即myUtils:::eigenMatMult(A, A)
- 添加
eigenMatMult
出口,手工或通过roxygen标签
我建议你向Wickham博士和/或他的bug网站提交错误报告。 RcppArmadillo的作品;将本书移开,从我们提供的RcppArmadillo.package.skeleton()开始,测试和记录。干杯。 –
当然,你还需要_build_包'myUtils'和_load_它。你的问题不清楚你是否做过。 –
我测试功能之前做的最后一件事是构建与刷新 - 这是在我的岗位 – dan