Как заставить Rcpp найти новый модуль? - PullRequest
5 голосов
/ 25 июля 2010

После того, как я успешно скомпилировал новый модуль Rcpp (пример из «Представления функций и классов C ++ с помощью модулей Rcpp, Дирк Эдделбюттель Ромен Франсуа»)

Следуя инструкциям в документе,

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

R пожаловался на ошибки:

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

Я попытался поместить '' dyn.load ("/ path / to / yada.dll") "перед вызовом" Module ("yada") ", но ошибка та же.

В сети очень мало информации о модуле Rcpp. Кто-нибудь знает, как решить проблему? Должен ли я положить скомпилированный модуль DLL в какую-то специальную папку?

Пример кода:

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

1 Ответ

2 голосов
/ 28 июля 2010

Чтобы загрузить модуль из внешней библиотеки ("yada.dll"), необходимо предоставить аргумент PACKAGE для функции Module ():

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

Полный пример выглядит следующим образом (протестировано вLinux, я думаю, он работает аналогично под 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" )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...