由於性能方面的原因,我正在使用R的.Call
在C級別上實現R包中的一個函數。接口。我希望我的C函數能夠使用另一個包(network
)中定義的一些已經存在的C函數來訪問和操作數據結構。然而,我是C新手,我一直無法弄清楚如何正確設置/修改network
中的C函數註冊和我的包中的導入定義,以便我可以直接調用C代碼而不創建我的包中的代碼的副本。將C頭函數從另一個導出時導入R包的正確方法是什麼?
的CRAN文檔 https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Linking-to-native-routines-in-other-packages似乎是說,交聯封裝是可能的,並且該lme4
和Matrix
包提供一個例子。 (我可以找到Matrix
的INIT.C文件R_RegisterCCallable
,但我一直沒能在lme4
找到相應的R_GetCCallable
調用)。
也許我缺少的步驟是輸入正確的便攜方式來自network/inst/include的API頭文件放入我的軟件包的C src中?
我的問題與以下三者密切相關,但似乎所有解決方案都使用Rcpp,因此似乎掩蓋了導入定義步驟(可能是因爲除了像我這樣的C新手之外,這對所有人都是顯而易見的)。
using C function from other package in Rcpp
How do I share C++ functions in Rcpp-based libraries between R packages?
Best way to use c++ code from R package FOO in package BAR
查看您提供的RcppRedis示例我可以看到'#include'行提供了RApiSerialize在'/ inst/include'目錄中提供的文件的確切名稱。編譯器不需要額外的路徑信息來定位頭文件 –
skyebend
正確。 'DESCRIPTION'中的'LinkingTo:'處理路徑。 –