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

回复:

require( Rcpp )
dyn.load( "yada.so" )
yada <- Module( "yada", PACKAGE = "yada" )
yada$hello( "world" )
于 2010-07-28T10:28:56.150 回答