5

新しい Rcpp モジュールのコンパイルに成功した後 (「Rcpp モジュールを使用した C++ 関数とクラスの公開、Dirk Eddelbuettel Romain Francois」の例)

紙の指示に従って、

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

R はエラーについて不平を言いました:

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

「Module( "yada" )」を呼び出す前に「dyn.load("/path/to/yada.dll")」を入れてみましたが、それでも同じエラーです。

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

1 に答える 1

2

モジュールを外部ライブラリ ("yada.dll") からロードするには、Module() 関数に PACKAGE 引数を指定する必要があります。

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" )
于 2010-07-28T10:28:56.150 に答える