我是否需要在 DESCRIPTION 文件中为使用它的 R 包导入 RccpEigen,还是 "LinkingTo" 就足够了?

Do I need to import RccpEigen in the DESCRIPTION file for an R package using it, or is "LinkingTo" enough?

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

Imports: Rcpp (>= 0.11.3), RcppEigen (>= 0.3.2.3.0)
LinkingTo: Rcpp, RcppEigen

但是,执行 R CMD check --as-cran <myPackageName_1.0.0>.tar.gz 会得到以下结果:

"Package in Depends/Imports which should probably only be in LinkingTo: 'RcppEigen'"

编写 R 扩展页面说:"Specifying a package in ‘LinkingTo’ suffices if these are C++ headers containing source code or static linking is done at installation: the packages do not need to be (and usually should not be) listed in the ‘Depends’ or ‘Imports’ fields. This includes CRAN packages BH and almost all users of RcppArmadillo and RcppEigen."

我不懂C++,所以我不知道这是什么意思。我创建包的过程在这里:RcppEigen - going from inline to a .cpp function in a package and "Map"

可以从 "Imports" 中删除 RcppEigen 而 why/why 不行吗? (即,对于我的情况,您能否解释一下 Writing R Extension 页面在说什么,以便我能理解我在做什么?我实验室的 R 和软件专家都说他们不理解 "Imports" 和 "LinkingTo".)

简要说明:

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

刚运行RcppArmadillo对应的函数时,得到

Imports: Rcpp (>= 0.11.3)
LinkingTo: Rcpp, RcppArmadillo

所以我倾向于一个错误。我现在为它打开 an issue ticket

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

  • Imports:是 Depends 的首选现代替代品;你还需要使用 NAMESPACE
  • LinkingTo: 主要是用来指向头文件的,我们这里就是这样。

所以编写 R 扩展,或 Hadley's online book 了解详细信息。