2010-07-25 6 views
5

Nachdem ich ein neues RCPP Modul (das Beispiel von "Verfügbarmachen C++ Funktionen und Klassen mit RCPP Modulen, Dirk Eddelbuettel Romain Francois") erfolgreich kompiliertWie kann Rcpp ein neues Modul finden?

den Anweisungen in der Papier-Folgen,

require(Rcpp) 
yada <- Module("yada") 

R beschwerte über Fehler:

Error in FUN("_rcpp_module_boot_yada"[[1L]], ...) : 
    no such symbol _rcpp_module_boot_yada in package .GlobalEnv 

ich habe versucht, setzen '' dyn.load ("/ path/to/yada.dll") '' vor '' Module ("bla") '', immer noch den gleichen Fehler aufrufen.

Es gibt sehr wenig Informationen über das Rcpp-Modul online. Kennt jemand wie man das Problem löst? Sollte ich kompilierte Moduldll in einen bestimmten Ordner legen?

Der Beispielcode:

const char* hello(std::string who){ 
    std::string result("hello ") ; 
    result += who ; 
    return result.c_str() ; 
} 

RCPP_MODULE(yada){ 
    using namespace Rcpp ; 
    function("hello", &hello) ; 
} 

Antwort

2

Um das Modul von der externen Bibliothek zu laden ("yada.dll"), müssen Sie das Paket Argument für die Module liefern() Funktion:

yada <- Module("yada", PACKAGE = "yada") 

Das komplette Beispiel sieht wie folgt aus (unter Linux getestet, ich denke, es unter Windows analog funktioniert):

C++:

#include <Rcpp.h> 

const char* hello(std::string who){ 
    std::string result("hello ") ; 
    result += who ; 
    return result.c_str() ; 
} 

RCPP_MODULE(yada){ 
    using namespace Rcpp ; 
    function("hello", &hello) ; 
} 

R:

require(Rcpp) 
dyn.load("yada.so") 
yada <- Module("yada", PACKAGE = "yada") 
yada$hello("world") 
+1

bekomme ich nur '> Module ("bla", "bla") Uninitialized Modul mit dem Namen "bla" aus dem Paket "Yada" > is.loaded ("bla") [1] FALSCH' – highBandWidth