簡體   English   中英

在 R 包內的 NAMESPACE 中導入 Rcpp 頭文件

[英]Importing an Rcpp header file in NAMESPACE within an R Package

這是我在R 中的第一個包,我已經有了工作包,但我會刪除 cpp 文件中的一些重寫功能,所以我做了一個可以使用單個功能的頭文件。

我怎樣才能把這個標題放在包里? 請注意, header.hheader.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文件的主要要求是確保:

  1. 出於注冊原因,從Rcpp包中導入了一個函數。
    • 通常,使用evalCppsourceCpp
  2. 通過useDynLib()提供共享對象的名稱,
    • 這是正在構建的R包的名稱。
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/Makevarssrc/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM