我是否需要在使用它的 R 包的说明文件中导入 RccpEigen,或者“LinkingTo”就足够了?

Cat*_*ina 4 c++ r rcpp eigen

我使用 RcppEigen.package.sculpture() 作为向现有 R 包添加小函数的模板,因此我的描述文件现在包含以下行:

\n\n
Imports: Rcpp (>= 0.11.3), RcppEigen (>= 0.3.2.3.0)\nLinkingTo: Rcpp, RcppEigen\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,这样做R CMD check --as-cran <myPackageName_1.0.0>.tar.gz会给出以下结果:

\n\n

“Depends/Imports 中的包可能只应位于 LinkingTo:\'RcppEigen\'”

\n\n

编写 R 扩展页面说:“如果这些是包含源代码的 C++ 标头或在安装时完成静态链接,则在 \xe2\x80\x98LinkingTo\xe2\x80\x99 中指定包就足够了:这些包不需要(并且通常不应该)列在 \xe2\x80\x98Depends\xe2\x80\x99 或 \xe2\x80\x98Imports\xe2\x80\x99 字段中。这包括 CRAN 包 BH 以及 RcppArmadillo 和 RcppEigen 的几乎所有用户。

\n\n

我不懂C++,所以我不知道这意味着什么。我创建包的过程如下:RcppEigen - getting from inline to a .cpp function in a package and "Map"

\n\n

可以从“导入”中删除 RcppEigen 吗?为什么/为什么不呢?(即,对于我的情况,您能否解释一下“编写 R 扩展”页面的内容,以便我能够理解我在做什么?我实验室中的 R 和软件专家都表示他们不理解之间的区别“导入”和“LinkingTo”。)

\n

Dir*_*tel 8

简要地:

  1. 目前 CRAN 上有 25 个使用 RcppEigen 的包。这就是 25 个可行的案例研究。你可以看一两个。
  2. LinkingTo: 一般就足够了。
  3. 骨架生成器仍然添加导入可能是一个错误。我们在 RcppArmadillo 中不再这样做。

当我刚刚运行 RcppArmadillo 的相应函数时,我得到了

Imports: Rcpp (>= 0.11.3)
LinkingTo: Rcpp, RcppArmadillo
Run Code Online (Sandbox Code Playgroud)

所以我倾向于错误。我现在为其开了一张问题单。

更广泛地说,LinkingTo: 和 Imports: 之间的区别是

  • Imports:是 Depends 的首选现代替代方案;你还需要使用 NAMESPACE
  • LinkingTo: 主要用于指向头文件,就像我们在这里所做的那样。

So Write R Extensions,或Hadley 的在线书籍了解详细信息。