Ich habe 2 Dateien, Rfile.R und Cppfile.cpp.
Inhalt in Cppfile.cpp:
%Vor%Inhalt in Rfile.R:
%Vor%Ich möchte ein R-Paket basierend auf den 2 Dateien erstellen. Ich benutze die neuesten Versionen von Rstudio und Roxygen2.
Ich habe drei Möglichkeiten ausprobiert, um das Paket mit oder ohne Roxygen2 zu erstellen, und hatte verschiedene Ergebnisse:
Neues Projekt- & gt; Neues Verzeichnis- & gt; R-Paket- & gt; Typ: Paket w / Rcpp, fügen Sie sowohl Rfile.R als auch Cppfile.cpp als Quelldateien hinzu. Bauen & amp; Nachladen, alles funktioniert gut. Die Funktionen funktionieren wie sie.
Neues Projekt- & gt; Neues Verzeichnis- & gt; R-Paket- & gt; Typ: Paket w / Rcpp, fügen Sie sowohl Rfile.R als auch Cppfile.cpp als Quelldateien hinzu. Wählen Sie "Dokumentationen mit Roxygen generieren", überprüfen Sie alle Optionen. Bauen & amp; Neu laden, die Funktionen funktionieren nicht. Die Eingabe von "RF" gibt den Inhalt von RF aus und bei Eingabe von "CPPF" erscheint "Objekt nicht gefunden".
Neues Projekt- & gt; Neues Verzeichnis- & gt; R-Paket- & gt; Typ: Paket w / Rcpp, fügen Sie nur Cppfile.cpp als Quelldateien hinzu. Wählen Sie "Dokumentationen mit Roxygen generieren", überprüfen Sie alle Optionen. Bauen & amp; Neu laden, die Funktion funktioniert. Kopieren Sie dann Rfile.R direkt in den Projektordner - & gt; R-Ordner. Bauen & amp; Nachladen, alles in Ordnung, Funktionen funktionieren gut.
Benutze ich den Roxygen falsch oder hat Roxygen Bugs? Ich brauche es zu dokumentieren. Ich kann mich an den 3. Weg halten, der mich viel Energie kostet, aber verkabelt.
Danke!
Eine Möglichkeit, das Problem zu lösen: Wenn Sie "Dokumentationen mit Roxygen erstellen" auswählen, aktivieren Sie nicht die Option "NAMESPACE-Datei".
Sie vermischen zwei Dinge (die leider leicht zu verwechseln sind):
Zunächst wird das Attribut // [[Rcpp::export]]
zum automatischen Generieren von Wrapper-Funktionen in zwei Dateien, RcppExports.cpp
und RcppExports.R
, verwendet. Eine Wrapper-R-Funktion, CPPF
, wird hier automatisch von Rcpp::compileAttributes()
generiert und in R/RcppExports.R
platziert.
Zweitens können roxygen
-Kommentare verwendet werden, um NAMESPACE
zu verwalten, z. mit dem @export
-Tag. Beachten Sie, dass dies anders ist von // [[Rcpp::export]]
!
Die automatisch generierte Funktion wird nicht automatisch exportiert. Der Rcpp.package.skeleton()
erzeugt eine NAMESPACE
-Datei, die automatisch alle Funktionen eines gegebenen Namens exportiert; dh der exportPattern("^[[:alpha:]]+")
-Eintrag. Dies ist gut genug für kleine Pakete; Aber wenn Ihr Paket komplizierter wird, werden Sie eine feinere Kontrolle über Ihren Namespace benötigen. Oder Sie können einfach eine Konvention übernehmen, bei der alle internen, nicht exportierten Funktionen mit einem .
beginnen. In jedem Fall ermöglicht dieser Mechanismus, dass die automatisch generierte Funktion in den Paket-Namespace exportiert wird.
Wenn Sie roxygen
zur Verwaltung von NAMESPACE
verwenden möchten, müssen Sie Ihren C ++ - Funktionen roxygen
Kommentare hinzufügen, wenn sie im Namespace exportiert werden sollen. So könnten Sie Ihre Funktion wie folgt ändern:
Beachten Sie, dass Sie möglicherweise roxygen2::upgradeRoxygen()
ausführen müssen, um sicherzustellen, dass roxygen2
die NAMESPACE
für neue Versionen von roxygen2
übernimmt.
Wenn 2. nicht funktioniert, file es als (reproduzierbaren) Fehlerbericht mit dem roxygen2 Team.
Ich sehe kein Rcpp Problem; Es ist möglich, dass bei der Imports: / NAMESPACE-Deklaration ein Fehler aufgetreten ist. Ich sehe hier kein Rcpp Problem (wie 1. gut funktioniert).
FWIW Ich verwende auch roxygen2 auf einigen Paketen, und ich baue sie auch von Zeit zu Zeit in RStudio.