将Rcpp头文件导入NAMESPACE中的R包中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Rcpp头文件导入NAMESPACE中的R包中相关的知识,希望对你有一定的参考价值。
这是我在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()
提供共享对象的名称, - 这是正在构建的
- 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 包失败 devtools::check,因为“找不到函数”,即使该函数已导入 NAMESPACE
使用 Rcpp 模块向 R 公开简单的 C++ Student 类
在包 BAR 中使用 R 包 FOO 中的 C++ 代码的最佳方法