【问题标题】:Rcpp Rcpp.package.skeleton("mypackage") "rcpp_hello_world" not available for .Call() for package "mypackage"Rcpp Rcpp.package.skeleton("mypackage") "rcpp_hello_world" 不适用于包 "mypackage" 的 .Call()
【发布时间】:2014-03-23 17:19:07
【问题描述】:

我已经设法通过 R 提示符下的以下命令在 Windows 中安装 Rcpp.package.skeleton -

Rcpp.package.skeleton("mypackage")
system("R CMD build mypackage")
system("R CMD INSTALL mypackage")
library(mypackage)

这将创建mypackage.dll。但是,当我执行以下命令时 -

rcpp_hello_world <- function(){ .Call( "rcpp_hello_world", PACKAGE = "mypackage")}
rcpp_hello_world()

我收到以下错误:

Error in .Call("rcpp_hello_world", PACKAGE = "mypackage") : 
"rcpp_hello_world" not available for .Call() for package "mypackage"

我运行 sessionInfo() 并得到以下信息:

attached base packages:
[1] tools     stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] mypackage_1.0 inline_0.3.13 Rcpp_0.11.1

声明我的新 mypackage 在那里。

我可以做进一步的检查来看看发生了什么吗?有什么想法吗?

【问题讨论】:

  • 你真的安装/编译了这个包吗?
  • 另外system("R CMD INSTALL mypackage") 是错误的。您只需在前一行中执行 build 即可创建应安装的 tarball。如果你坚持从 R 做,它应该是system("R CMD INSTALL mypackage_1.0.0.tar.gz")(或任何版本号设置)。

标签: r rcpp


【解决方案1】:

FWIW,我在使用 Rcpp 改造现有的仅 R 包时遇到了类似的错误,问题是 NAMESPACE 中缺少 useDynLib(mypackage)

【讨论】:

  • 只是补充一点,在使用 RCPP 在包之间移植脚本时,可能在某处使用了 roxygen 标签 @useDynLib myPackage 并忘记更改它。另一件要寻找的是包挂钩,例如.onLoad
  • StackOverflow 的胜利!谢谢。
  • 就我而言,我已经有了#' @useDynLib mypackage,但我需要在后面添加NULL
【解决方案2】:

该软件包在每个版本之前都经过了广泛的测试,包括在使用 Windows 的 Win-builder 上。回归测试甚至包括通过调用 package.skeleton() 以这种方式构建包

CRAN 在发布后也对其进行了重建。许多人使用它。

对于所有这些人来说,测试是合适的,当long long 不能使用时,它是#define-d 离开。

现在,您坚持以非标准方式构建:据我所知,没有消息来源建议通过 system() 致电 R CMD INSTALL。我怀疑您只是遇到了$PATH 事故,然后发现了另一个错误的g++ 版本。

我建议按照文档的建议执行并运行

  R CMD INSTALL mypackage*tar.gz

cmd.exe 提示符中。

【讨论】:

    【解决方案3】:

    如果包 NAMESPACE 文件包含该行 useDynLib(mypackage, .registration = TRUE) (可能通过 roxygen 行 #' @useDynLib, .registration = TRUE),那么需要从 .C / .Call 函数调用中删除 PACKAGE = "mypackage"

    .Call( "rcpp_hello_world", PACKAGE = "mypackage") 变为.Call("rccp_hello_world")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-24
      • 2017-10-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      相关资源
      最近更新 更多