[英]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.