Rcpp Rcpp.package.skeleton("mypackage")"rcpp_hello_world"不适用于包含"mypackage"的.Call()

Kar*_*win 17 r rcpp

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

Rcpp.package.skeleton("mypackage")
system("R CMD build mypackage")
system("R CMD INSTALL mypackage")
library(mypackage)
Run Code Online (Sandbox Code Playgroud)

这创造了mypackage.dll.但是当我执行以下命令时 -

rcpp_hello_world <- function(){ .Call( "rcpp_hello_world", PACKAGE = "mypackage")}
rcpp_hello_world()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error in .Call("rcpp_hello_world", PACKAGE = "mypackage") : 
"rcpp_hello_world" not available for .Call() for package "mypackage"
Run Code Online (Sandbox Code Playgroud)

我跑了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
Run Code Online (Sandbox Code Playgroud)

说我的新mypackage在那里.

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

Joe*_*eng 32

FWIW,我在使用Rcpp改造现有的R-only软件包时遇到了类似的错误,但问题是遗漏useDynLib(mypackage)NAMESPACE.

  • 只是为了补充一点,当在使用RCPP的软件包之间移植脚本时,可能在某处使用了roxygen标签`@useDynLib myPackage`而忘记更改它.要寻找的另一件事是包钩子,比如`.onLoad`. (5认同)
  • 在我的例子中,我已经有了 `#' @useDynLib mypackage`,但我需要的是在后面添加 `NULL`。 (2认同)

Dir*_*tel 2

该软件包在每次发布之前都经过了广泛的测试,包括在使用 Windows 的 Win-builder 上进行的测试。回归测试甚至包括通过调用package.skeleton().

它也在发布后由 CRAN 重建。很多人都用它。

对于所有这些人来说,测试都是合适的,当long long不能使用时,就#define放弃它。

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

我建议按照文档的建议进行操作并运行

  R CMD INSTALL mypackage*tar.gz
Run Code Online (Sandbox Code Playgroud)

在提示中cmd.exe