私のグループは、植物の成長をシミュレートするためのRパッケージを開発しています(GitHubレポジトリを参照)。Rパッケージは.Call
Cとのインターフェースに使用します。
スタンドアロンCライブラリを作成する価値があると判断しました。2つの主な理由は、1)使い慣れたCデバッグツールを使用すること、および2)開発者/ユーザーコミュニティの大部分がコンパイル済み言語に精通していることです(ほとんどのクラスのモデルはCまたはFortranで書かれています)。ただし、Rパッケージはこのコミュニティの外部の多くの人がアクセスできるため、その機能を維持したいと考えています。
Cライブラリの依存関係を持つRパッケージについて説明しているいくつかの関連する質問(https://stackoverflow.com/q/12328156/199217など)を確認しましたが、既存のRパッケージのデカップリングを特に扱う質問は見つかりませんでした。
提案されたアプローチ
(私たちがこれまでに思いついたこと...ストローマン)
- 既存の機能のテストを作成する
- Cライブラリを
src/
フォルダー内に保持する - R固有のCコード(
SEXP
Rライブラリの読み込みなど)を、先頭に「Rラッパー」ファイルを配置して配置します。R_*
- Cで構成ファイルを読み取るための個別の関数を作成する
- Rの機能を置き換える「メイン」のC関数を作成する
- Rラッパーファイルを無視するCライブラリのmakefileを書き込む
- Cライブラリが独立してRパッケージと同等に機能したら、C関数を別のリポジトリに移動することを検討できます。これはRパッケージの依存関係になります。
質問:
- この取り組みは見当違いですか?
- 潜在的な落とし穴を見落としていますか?
- RライブラリとCライブラリの両方を並行して開発するより良い方法はありますか?
- Rパッケージから分離されたCライブラリの例はありますか?
- RとCで同等の関数を比較するためのテストをどのように書けばよいでしょうか?