Importing an Rcpp header file in NAMESPACE within an R Package

China☆狼群 提交于 2021-01-29 17:26:54

问题


This is my first package in R, I already have working package but I would remove some rewriting function in cpp file, so I do an header file that work with single function.

How can I put this header in package? Note that header.h and header.cpp are in src/ directory of package and the #include "header.h" is in the .cpp file where I use this function

I tried to modify the NAMESPACE file with:

import(myheader) 

But, when I do:

R CMD INSTALL mypackage 

I receive this error:

Error: package or namespace load failed for 'mypackage' in namespaceExport(ns, exports):
 undefined exports: myheader

How can I solve this error?


回答1:


As @RalfStubner pointed out in the comments, the NAMESPACE file is meant for exporting and importing R functions and data.

The primary requirement for a NAMESPACE files in a package using Rcpp is to ensure:

  1. A single function from Rcpp package is imported for registration reasons.
    • Generally, either evalCpp or sourceCpp is used.
  2. Provide the name of the shared object via useDynLib(),
    • This is the name of the R package being built.
importFrom(Rcpp, sourceCpp)
useDynLib(<PACKAGE_NAME_HERE>, .registration = TRUE)

where <PACKAGE_NAME_HERE> is the name of the package without <>.


If you're interested in using headers to share code between R packages, consider looking at:

https://github.com/r-pkg-examples/rcpp-shared-cpp-functions

The main design pattern is using inst/include directory to place a header-only library. Then, in src/ write bindings to the library. Ensure that src/Makevars and src/Makevars.win has:

# Register where the header files for the package can be found
PKG_CXXFLAGS=-I../inst/include/

If you want to share function definitions between .cpp files in the same R package, see:

https://github.com/r-pkg-examples/rcpp-headers-src

This avoids a single monolithic .cpp file, but does not allow for sharing the compiled code routines between R packages outside of the exported R wrapper.



来源:https://stackoverflow.com/questions/59266585/importing-an-rcpp-header-file-in-namespace-within-an-r-package

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!