我目前有一个.cpp
可以使用sourceCpp()
. 正如预期的那样,创建了相应的 R 函数并且代码按预期工作。
这里是:
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector exampleOne(NumericVector vectorOne, NumericVector vectorTwo){
NumericVector outputVector = vectorOne + vectorTwo;
return outputVector;
}
我现在正在将我的项目转换为使用Rcpp
. 所以我用 rStudio 创建了骨架,并开始研究如何转换。
在 Hadley关于 Cpp 的优秀入门书中,他在“在包中使用 Rcpp”一节中说:
如果您的包使用 Rcpp::export 属性,则需要在包构建过程中增加一个步骤。compileAttributes 函数扫描包中的源文件以查找 Rcpp::export 属性,并生成将函数导出到 R 所需的代码。
每当添加、删除或更改其签名时,您都应该重新运行 compileAttributes。请注意,如果您使用 RStudio 或 devtools 构建包,则此步骤会自动发生。
所以看起来编译的代码sourceCpp()
应该像在包中一样工作。
我创建了相应的 R 文件。
exampleOne <- function(vectorOne, vectorTwo){
outToR <- .Call("exampleOne", vectorOne, vectorTwo, PACKAGE ="testPackage")
outToR
}
然后我(重新)构建了这个包,我得到了这个错误:
Error in .Call("exampleOne", vectorOne, vectorTwo, PACKAGE = "voteR") :
C symbol name "exampleOne" not in DLL for package "testPackage"
有没有人知道在获取使用 sourceCpp() 编译的代码然后在包中使用它时我还需要做什么?
我应该注意到我已阅读:“编写使用 Rcpp 的包” http://cran.rstudio.com/web/packages/Rcpp/vignettes/Rcpp-package.pdf并了解那里提供的基本结构。但是,在查看RcppExamples
源代码后,似乎小插图中的结构与示例包中使用的结构并不完全相同。例如,没有使用 .h 文件。此外,小插图和源代码都没有使用 [[Rcpp::export]] 属性。这一切都让我很难准确追踪我的错误在哪里。