这是我在R中的第一个程序包,我已经有了有效的程序包,但是我将删除cpp文件中的某些重写功能,因此我将使用单个功能的头文件。
如何将该标头放入包装中?请注意,header.h
和header.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
文件的主要要求是确保:
evalCpp
或sourceCpp
。useDynLib()
提供共享对象的名称,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包之间共享编译后的代码例程。