2010-07-25 12 views
5

Después compilado correctamente un nuevo módulo RCPP (el ejemplo de "La exposición de C++ funciones y clases con módulos RCPP, Dirk Eddelbuettel Romain Francois")¿Cómo hacer que Rcpp encuentre un nuevo módulo?

Siguiendo las instrucciones en el papel,

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

R quejaron acerca de los errores:

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

he intentado poner '' dyn.load ("/ ruta/a/yada.dll") '' '' antes de llamar al módulo ("bla") '', siendo el mismo error.

Hay muy poca información sobre el Módulo Rcpp en línea. ¿Alguien sabe cómo resolver el problema? ¿Debería poner el módulo compilado dll en alguna carpeta específica?

El código de ejemplo:

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) ; 
} 

Respuesta

2

para cargar el módulo de la biblioteca externa ("yada.dll"), debe proporcionar el argumento PAQUETE al módulo) función (:

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

El ejemplo completo el aspecto siguiente (probado bajo Linux, supongo que funciona bajo Windows análoga):

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

apenas consigo '> Módulo ("bla", "bla") módulo no inicializado llamado "yada" de paquete "yada" > is.loaded ("bla") [1] FALSE' – highBandWidth

Cuestiones relacionadas