【发布时间】:2018-05-16 17:09:15
【问题描述】:
我构建了一个Rpackage(称为myUtils),它使用cpp 文件,在RStudio 后面Hadley's manual。我的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,它成功完成,并在R目录中创建了RccpExports.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::,则两者都不会出现
我好像遗漏了什么,但我不知道是什么。
我们将不胜感激。
【问题讨论】:
-
我建议您向 Wickham 博士和/或他的错误站点提交错误报告。 RcppArmadillo 作品;把书移开,从我们提供、测试和记录的
RcppArmadillo.package.skeleton()开始。干杯。 -
你当然还需要build包
myUtils并load它。您的问题不清楚您是否这样做。 -
在测试该功能之前我做的最后一件事是 Build & Reload - 它在我的帖子中
-
您有
NAMESPACE文件吗?同样,我们的骨架将为您提供一个工作示例。 -
两者都是正确的。谢谢!
标签: r package rstudio rcpp devtools