这是我在R中的第一个包,我已经有了工作包,但我会删除 cpp 文件中的一些重写函数,所以我做了一个与单个函数一起使用的头文件。
如何将此标头放入包中?请注意,header.h和header.cpp位于src/包目录中,并且#include "header.h"位于.cpp我使用此函数的文件中
我尝试NAMESPACE用以下方法修改该文件:
import(myheader)
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时:
R CMD INSTALL mypackage
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error: package or namespace load failed for 'mypackage' in namespaceExport(ns, exports):
undefined exports: myheader
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
正如 @RalfStubner 在评论中指出的那样,该NAMESPACE文件用于导出和导入R函数和数据。
使用Rcpp 的NAMESPACE包中的文件的主要要求是确保:
evalCpp或。sourceCppuseDynLib(),
importFrom(Rcpp, sourceCpp)
useDynLib(<PACKAGE_NAME_HERE>, .registration = TRUE)
Run Code Online (Sandbox Code Playgroud)
其中<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/
Run Code Online (Sandbox Code Playgroud)
如果您想.cpp在同一R包中的文件之间共享函数定义,请参阅:
https://github.com/r-pkg-examples/rcpp-headers-src
这避免了单个整体.cpp文件,但不允许在导出的R包装器之外的R包之间共享已编译的代码例程。
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |