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

问题描述 投票:0回答:1

这是我在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

我该如何解决此错误?

r rcpp r-package
1个回答
0
投票

正如@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包之间共享编译后的代码例程。

© www.soinside.com 2019 - 2024. All rights reserved.