2010-07-25 15 views
5

Po pomyślnym opracowano nowy moduł RCPP (przykład z "Poddawanie C++ funkcje i klasy modułów RCPP Dirk Eddelbuettel Romain Francois")Jak sprawić, aby program Rcpp znalazł nowy moduł?

zgodnie z instrukcjami podanymi w papierze,

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

R skarżył o błędach:

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

Próbowałem oddanie '' dyn.load ("/ path/to/yada.dll") '' '' przed wywołaniem moduł ("bla") '', wciąż ten sam błąd.

Istnieje bardzo mało informacji o module Rcpp w Internecie. Czy wiadomo, jak rozwiązać problem? Czy powinienem umieścić skompilowaną bibliotekę DLL w jakimś specifiec folderze?

Kod przykład:

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

Odpowiedz

2

Aby załadować moduł z zewnętrznej biblioteki ("yada.dll"), należy podać argument paczkę do modułu() funkcja:

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

kompletny przykład wygląda następująco (testowane pod Linuksem, chyba że działa analogicznie pod Windows):

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

ja po prostu '> Module ("bla", "bla") niezainicjowaną moduł o nazwie "bla" z pakietu "bla" > is.loaded ("bla") [1] FALSE' – highBandWidth

Powiązane problemy