Wechseln von sourceCpp zu einem Paket mit Rcpp

Ich habe derzeit eine.cpp Datei, die ich mit kompilieren kannsourceCpp(). Wie erwartet wird die entsprechende R-Funktion erstellt und der Code funktioniert wie erwartet.

Hier ist es:

#include <Rcpp.h> 
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector exampleOne(NumericVector vectorOne, NumericVector vectorTwo){

    NumericVector outputVector = vectorOne + vectorTwo; 

    return outputVector;
}

Ich konvertiere jetzt mein Projekt in ein Paket mitRcpp. Also habe ich mit rStudio das Skelett erstellt und überlegt, wie man Dinge umwandelt.

In Hadleysexzellenter Primer auf Cpp, sagt er im Abschnitt "Verwenden von Rcpp in einem Paket":

Wenn Ihre Pakete das Rcpp :: export-Attribut verwenden, ist ein zusätzlicher Schritt im Paketerstellungsprozess erforderlich. Die compileAttributes-Funktion durchsucht die Quelldateien in einem Paket nach Rcpp :: export-Attributen und generiert den Code, der zum Exportieren der Funktionen nach R erforderlich ist.

Sie sollten compileAttributes erneut ausführen, wenn Funktionen hinzugefügt, entfernt oder deren Signaturen geändert werden. Beachten Sie, dass dieser Schritt automatisch ausgeführt wird, wenn Sie Ihr Paket mit RStudio oder devtools erstellen.

Es sieht also aus wie der Code, mit dem kompiliert wurdesourceCpp() sollte so ziemlich wie in einem Paket funktionieren.

Ich habe die entsprechende R-Datei erstellt.

exampleOne <- function(vectorOne, vectorTwo){
    outToR <- .Call("exampleOne", vectorOne, vectorTwo, PACKAGE ="testPackage")
    outToR
}

Dann habe ich das Paket (neu) erstellt und bekomme folgende Fehlermeldung:

Error in .Call("exampleOne", vectorOne, vectorTwo, PACKAGE = "voteR") : C symbol name "exampleOne" not in DLL for package "testPackage"

Hat jemand eine Idee, was ich sonst noch tun muss, wenn ich Code, der mit sourceCpp () kompiliert wird, nehme und dann in einem Paket verwende?

Ich sollte beachten, dass ich gelesen habe: "Schreiben eines Pakets, das Rcpp verwendet"http://cran.rstudio.com/web/packages/Rcpp/vignettes/Rcpp-package.pdf und die dort vorgestellte Grundstruktur verstehen. Nach einem Blick auf dieRcppExamples Im Quellcode sieht es so aus, als ob die Struktur in den Vignetten nicht exakt der im Beispielpaket verwendeten entspricht. Zum Beispiel werden keine .h-Dateien verwendet. Auch verwenden weder die Vignette noch der Quellcode das Attribut [[Rcpp :: export]]. Dies alles macht es schwierig, genau zu finden, wo mein Fehler ist.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage