[英]Importing an Rcpp header file in NAMESPACE within an R Package
这是我在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()
提供共享对象的名称,
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
具有:
# Register where the header files for the package can be found
PKG_CXXFLAGS=-I../inst/include/
如果要在同一个R包中的.cpp
文件之间共享函数定义,请参阅:
https://github.com/r-pkg-examples/rcpp-headers-src
这避免了单个单一的.cpp
文件,但不允许在导出的R包装器之外的R包之间共享已编译的代码例程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.