1

我正在尝试在基于 Rcpp 的包中返回一个对象,其中类型libsbml::Model来自libsbml C++ 库

最后,我希望我的包能够在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为返回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::ModelR将非常感激。代码的最终版本可以在 -

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

4

0 回答 0