【问题标题】:Error: missing "PACKAGE" argument in RcppExport.R?错误:RcppExport.R 中缺少“PACKAGE”参数?
【发布时间】:2017-06-24 18:34:54
【问题描述】:

我重新构建了我正在开发的包(并且自一个月以来我没有更新过),我发现我的所有测试都失败并出现错误:

Error in myCPlusPlusFun(...  : 
object 'myPackage_myCPlusPlusFun' not found

然后我发现我的RcppExports.R 文件中的所有函数都缺少参数PACKAGE = myPackage,请参阅git diff 的输出:

 myCPlusPlusFun <- function(X) {
-    invisible(.Call('myPackage_myCPlusPlusFun', PACKAGE = 'myPackage', X))
+    invisible(.Call(myPackage_myCPlusPlusFun, X))

知道发生了什么吗?我想我需要有

invisible(.Call('myPackage_myCPlusPlusFun', PACKAGE = 'myPackage', X))

在我构建包时再次自动生成行 (?)

谢谢!

编辑:我现在的NAMESPACE 文件中有以下几行:

exportPattern("^[[:alpha:]]+")
importFrom(Rcpp,evalCpp)
useDynLib(locus, .registration = TRUE)

(加上其他一些importsexports)。

我最近还必须添加一个 C 文件来注册具有以下内容的动态符号:

#include <R.h>
#include <Rinternals.h>
#include <R_ext/Rdynload.h>

void R_init_myPackage(DllInfo* info) {
  R_registerRoutines(info, NULL, NULL, NULL, NULL);
  R_useDynamicSymbols(info, TRUE); 
}

后一个文件还需要吗?

【问题讨论】:

标签: c++ r rcpp r-package


【解决方案1】:

是的,“一切都变了”,因为 R 3.4.0 造就了我们,而且我们顺从了。

第二部分绝对没问题——这就是应该的样子。

请检查 - 你有生成的src/RcppExports.cpp - 你在NAMESPACE有正确的注册信息

在过去几周内更新了许多软件包,这通常有效。如果有疑问,也许可以通过创建一个快速的一次性包 Rcpp.package.skeleton() 并进行比较。

还请注意,我们有两个需要修复的极端情况,因此如果您需要,可以使用临时版本(参见 rcpp-devel 发布)——但是 我不认为你这样做。

【讨论】:

  • 非常感谢您的帮助。我查看了使用Rcpp.package.skeleton() 生成的文件。但是,我仍然坚持这个问题。我在我的帖子中添加了一个 EDIT,其中提到了我在 NAMESPACE 和另一个注册动态符号的文件中的信息。你能就他们的内容给我你的意见吗?再次感谢!
  • 您可能不需要该文件。如果没有调用R_registerRoutines() 的文件,则Rcpp 会将其添加到src/RcppExports.cpp。但是,如果您已经拥有它,那么您的将被保留。此外,您可能需要列出要从 NAMESPACE 导出的符号作为通配符表达式,您还导出为 .Call() 生成的符号,以便您收到有关缺少文档的警告。
  • 如果 this 是你的仓库,那么一切似乎都很好。 R 只抱怨 Imports: 中的 Matrix,但没有从 NAMESPACE 中导入。无论是否重新生成RcppExports.cpp,都可以双向使用,并具有更新的动态注册。
  • 谢谢!它现在可以工作了,我确实不得不删除 dyn 符号的注册(1-2 个月前添加以使音符静音。但现在这个音符已经消失了)。事实上,当我重新添加 exportPattern("^[[:alpha:]]+") 时,我并没有意识到它正在导出所有内容。再次感谢您的帮助,它非常有用!
猜你喜欢
  • 2021-03-30
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
相关资源
最近更新 更多