将Rcpp头文件导入NAMESPACE中的R包中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Rcpp头文件导入NAMESPACE中的R包中相关的知识,希望对你有一定的参考价值。

这是我在R中的第一个程序包,我已经有了有效的程序包,但是我将删除cpp文件中的某些重写功能,因此我将使用单个功能的头文件。

如何将该标头放入包装中?请注意,header.hheader.cpp在程序包的src/目录中#include "header.h"在我使用此功能的.cpp文件中

我尝试使用以下命令修改NAMESPACE文件:

import(myheader) 

但是,当我这样做时:

R CMD INSTALL mypackage 

我收到此错误:

Error: package or namespace load failed for 'mypackage' in namespaceExport(ns, exports):
 undefined exports: myheader

我该如何解决此错误?

答案

正如@RalfStubner在评论中指出的,NAMESPACE文件用于导出和导入R函数和数据。

使用Rcpp的软件包中NAMESPACE文件的主要要求是确保:

  1. 包中的单个功能出于注册原因而导入。
      通常使用evalCppsourceCpp
  2. 通过useDynLib()提供共享对象的名称,
    • 这是正在构建的
    • R包的名称。
useDynLib()
其中importFrom(Rcpp, sourceCpp)
useDynLib(<PACKAGE_NAME_HERE>, .registration = TRUE)
是不带<PACKAGE_NAME_HERE>的程序包的名称。 


如果您有兴趣使用标头在

R

软件包之间共享代码,请考虑:<>

主要设计模式是使用https://github.com/r-pkg-examples/rcpp-shared-cpp-functions目录放置仅标头的库。然后,在inst/include中将绑定写入库。确保src/src/Makevars具有:

src/Makevars.win


如果要在同一

R

程序包中的# Register where the header files for the package can be found PKG_CXXFLAGS=-I../inst/include/ 个文件之间共享功能定义,请参阅:.cpp

这避免了单个整体https://github.com/r-pkg-examples/rcpp-headers-src文件,但不允许在导出的[[R

包装器之外的

R包之间共享编译后的代码例程。

以上是关于将Rcpp头文件导入NAMESPACE中的R包中的主要内容,如果未能解决你的问题,请参考以下文章

分离R中另一个包导入的所有包

R 包失败 devtools::check,因为“找不到函数”,即使该函数已导入 NAMESPACE

使用 Rcpp 模块向 R 公开简单的 C++ Student 类

在包 BAR 中使用 R 包 FOO 中的 C++ 代码的最佳方法

使用 Shiny 时,包 rcpp 不适用于(R 版本 2.15.2)

降价中的 Rcpp