使用Rcpp将C ++对象导出到R中,并从外部C ++库中公开一些类方法

时间:2016-08-19 17:45:25

标签: r rcpp

我正在尝试从libsbml::Model C++ library

返回基于Rcpp的包中的对象,该包的类型为libsbml

最后,我希望我的包能够在R

中执行此类操作
m <- getModel("text.xml")
m$getListofParameters

我正在尝试以下方法来返回模型

// [[Rcpp::export]]
SEXP getModel (std::string fname) {

  libsbml::SBMLReader reader;
  libsbml::SBMLDocument* document = reader.readSBMLFromFile(fname);

  libsbml::Model* model = document->getModel();

  // Rcpp::XPtr<libsbml::Model> modelPtr(model);
  // return Rcpp::wrap(modePtr);

  return Rcpp::wrap(*model);

}

它给了我一个明显的错误, cannot initialize a variable of type "SEXP' (aka 'SEXPREC *') with an lvalue of type 'libsbml::Model *const'

可能是因为我需要根据wrap库中最近的article展开libsbml::Model以返回Rcpp类型(我认为)。这个想法我是在正确的轨道上吗?这似乎是一项艰巨的任务,因为libsbml::Model是一个庞大的类,我是C ++的新手,没有面向对象编程的经验。

我还尝试了以下代码(使用Rcpp模块)

RCPP_MODULE(sbModel){

  using namespace Rcpp ;

  // we expose the class libsbml::Model as "Model" on the R side
  class_<libsbml::Model>("Model")

    // exposing the default constructor
    .constructor<unsigned int, unsigned int>("Creates a new Model using the given SBML level and version values.")

    // exposing member functions -- taken directly from libsbml::Model
    .method( "getListofParameters", &libsbml::Model::getListOfParameters(),"Get the list of Parameters of the model")

}

为了揭示libsbml::Model类的一些方法。但是我在包

上的Clean and Rebuild命令上收到以下消息

call to non-static member function without an object argument

对于这个模糊的问题感到抱歉,但是有关如何实现将libsbml::Model导出到R并公开该类的某些字段的最终目标的任何指示都将非常感激。最终版本的代码可以在 -

找到

https://github.com/sn248/Rcppsbml/blob/master/src/getModel.cpp

0 个答案:

没有答案