2016-05-20 99 views
-1

我想紧跟在Rcpp package documentation的方向,但我正在逐渐功能不适用于.CALL

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。任何帮助,将不胜感激。

+0

投票结束这个问题,因为这是一个印刷错误,导致这个问题在两个地方(详见下文在我的文章中)。 – coatless

+0

问题不是由印刷错误造成的。当我问这个问题时,只有一个印刷错误。实际的解决方案在我的评论中。 – user3271788

+0

问题在于:1.“NAMESPACE”中的软件包名称和2.我的帖子突出显示的主要内容中包含演示脚本。此外,按原样提供的示例对于* StackOverflow *的其他用户是不可重现的(并且仍然是)。这两个都是要求关闭问题的有效标准。 – coatless

回答

5

当您从切换的名字:

MicroCreditLRVB

MicroCreditLRVB [R

你忘了在NAMESPACE file

修改包名

例如

useDynLib(MicroCreditLRVB) 

变为:

useDynLib(MicroCreditLRVBR) 

另外,从microcredit_stan_lib.R除去线1-22。他们应该被放入/inst内发现了一个“演示”文件。

最后,使用BH,降低对Makevars内的绝对路径进口boost头文件。

+0

抱歉,我从一个不同的私人回购中复制了它,并忘记更改NAMESPACE文件。但这不是问题。旧的软件包被称为MicroCreditLRVB,但它仍然失败,并且在将此处的NAMESPACE更改为MicroCreditLRVBR之后,它仍然如上所述失败。 你的其他观点都很好,当然我会在公开这个软件包之前解决它们。就目前而言,我只是为了提出这个问题而创建了这个回购协议,我不认为它们是造成问题的原因。 – user3271788

-1

问题是由从该文件microcredit_stan_lib.R删除行

jac_test <- TestJacobian() 

解决。

供将来参考,我在src/一个C++文件中定义

// [[Rcpp::export]] 
Rcpp::List TestJacobian() { 
    ... do stuff ... 
} 

..和库文件R/microcredit_stan_lib.R的已在最外面的环境

jac_test <- TestJacobian() 

行注释掉jac_test <- TestJacobian(),问题就解决了。我不知道为什么。