函数不适用于.Call使用Rcpp.package.skeleton()和compileAttributes

时间:2016-05-20 02:15:02

标签: c++ r rcpp

我正在密切关注Rcpp package documentation中的说明,但我收到了错误

Error in .Call("MicroCreditLRVBR_TestJacobian", PACKAGE = "MicroCreditLRVBR") : 
  "MicroCreditLRVBR_TestJacobian" not available for .Call() for package "MicroCreditLRVBR"

包框架是使用Rcpp.package.skeleton()构建的。我复制了RC++代码,修改了Makevars以指向包外的一些代码,更新了DESCRIPTION以链接到RcppEigen,以及跑了compileAttributes()。然后我运行R CMD build来创建.gz文件并R CMD INSTALL来安装它。它已成功构建和链接,但因上述错误而终止。

我可以看到函数MicroCreditLRVBR_TestJacobian确实在RcppExports.cppRcppExports.R中定义。我不知道为什么它不适用于.Call

请注意,NAMESPACE包括useDynLib(MicroCreditLRVBR)exportPattern("^[[:alpha:]]+")

当前状态的包的公共副本位于this github repo。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

从名称切换时:

<强> MicroCreditLRVB

<强> MicroCreditLRVB - [R

您忘记在NAMESPACE file

中修改包名称

e.g。

filter

转到:

useDynLib(MicroCreditLRVB) 

此外,从microcredit_stan_lib.R删除第1-22行。它们应该被放入&#34;演示&#34;在useDynLib(MicroCreditLRVBR) 内找到的文件。

最后,使用/inst导入提升标题,并减少BH中的绝对路径。

答案 1 :(得分:-1)

通过删除行

解决了问题
jac_test <- TestJacobian()

来自文件microcredit_stan_lib.R

为了将来参考,我在src/中有一个定义了

的C ++文件
// [[Rcpp::export]]
Rcpp::List TestJacobian() {
  ... do stuff ...
}

..以及在最外层环境中有一行的库文件R/microcredit_stan_lib.R

jac_test <- TestJacobian()

通过评论jac_test <- TestJacobian(),问题得以解决。我不确定为什么。