Meine Gruppe hat ein R-Paket entwickelt, um das Pflanzenwachstum zu simulieren (siehe GitHub-Repository ). Das R-Paket verwendet .Call
die Schnittstelle zu C.
Wir haben entschieden, dass es sich lohnt, eine eigenständige C-Bibliothek zu erstellen. Die beiden Hauptgründe sind 1) die Verwendung vertrauter C-Debugging-Tools und 2) ein großer Teil der Entwickler- / Benutzergemeinschaft ist mit kompilierten Sprachen vertraut (die meisten Modelle in der Klasse sind in C oder Fortran geschrieben). Das R-Paket ist jedoch für viele außerhalb dieser Community zugänglich, daher möchten wir seine Funktionalität beibehalten.
Ich habe einige verwandte Fragen geprüft, z. B. https://stackoverflow.com/q/12328156/199217 , in denen R-Pakete mit C-Bibliotheksabhängigkeiten behandelt werden, aber keine gefunden, die sich speziell mit der Entkopplung eines vorhandenen R-Pakets befasst.
Ein vorgeschlagener Ansatz
(was wir uns bisher ausgedacht haben ... ein Strohmann)
- Schreiben Sie Tests für vorhandene Funktionen
- Bewahren Sie die C-Bibliothek im
src/
Ordner auf - Platzieren Sie R-spezifischen C-Code (z. B.
SEXP
Laden von R-Bibliotheken usw.) in 'R-Wrapper'-Dateien, denen vorangestellt istR_*
- Erstellen Sie separate Funktionen zum Lesen von Konfigurationsdateien in C.
- Erstellen Sie eine 'Haupt'-C-Funktion, um die Funktionalität in R zu ersetzen
- Schreiben Sie ein Makefile für die C-Bibliothek, das R-Wrapper-Dateien ignoriert
- Sobald die C-Bibliothek unabhängig und gleichwertig mit dem R-Paket arbeitet, können Sie die C-Funktionen in ein separates Repository verschieben, was eine Abhängigkeit für das R-Paket darstellt
Fragen:
- Ist diese Anstrengung fehlgeleitet?
- Übersehen wir mögliche Fallstricke?
- Gibt es eine bessere Möglichkeit, die R- und C-Bibliotheken parallel zu entwickeln?
- Gibt es Beispiele für C-Bibliotheken, die von R-Paketen entkoppelt wurden?
- Wie könnten wir Tests schreiben, um äquivalente Funktionen in R und C zu vergleichen?