跨C / C ++和R

时间:2018-11-25 03:01:40

标签: c++ r

我是R / C ++的新手,并且编写了一个C ++程序,该程序可以模拟粒子在各种条件下的运动。为了分析结果数据,我决定使用R。

我遇到的问题是找到一种在C ++和R之间写入/读取数据的简便方法。我当前的(朴素的)解决方案是使用一个writedata.cpp函数,该函数声明一个字符串列表,该字符串列表指定哪个目录我想将数据写入所有文本文件的名称,然后一次将数据写入一个文件(通常调用用于处理每种数据类型的特定功能)。

在此之后,我需要笨拙地重复所有这些代码以及R脚本中的“魔术字符串”,以读取和处理数据。

模拟的基本对象是vector<vector<particle>>,其尺寸通常约为5000 x 1000000。particle本身看起来类似于以下内容:

struct particle2D {
    point pos;
    velocity vel; 
    //other observable data 
};

最终,我希望我的writedata.cpp函数更加灵活,以便我可以创建一个particle3D,而不必编写很多特定的代码来处理额外的维度。简单地添加到上述结构中指示的“可观察数据”列表中也是如此。

我知道有一些方法可以将整个结构写入文件。但是,鉴于我正在收集的数据量,我不确定这是否是可行的方法。

问题:是否有某种方法可以从R中获取C ++对象/结构,而又不涉及上述相当笨拙的方法?

1 个答案:

答案 0 :(得分:0)

您的问题以

结尾
  

给出一个程序P,该程序生成一些数据D,以及如何在不同平台/语言之间有效地存储和管理D)。

,您已经说过您的“程序P”是C ++,所以您可能想看看Rcpp。原因如下:

  • 基本类型无副本
  • 的无缝数据交换
  • 您无法克服:将如此多的数据写入文件并将其读回较慢
  • Rcpp涵盖标准向量和矩阵:基本上每种基本的 R 数据类型都被映射
  • 但事实并非如此:并非所有C ++数据结构都可以自动映射,因此您必须进行转换/调整
  • 其他优势:工具
  • 编译,链接,加载“正常工作”:在命令行中,无论在RStudio中还是任何地方
  • 其他库:Boost,Eigen,犰狳,...已经存在,还有许多其他库
  • 最后:CRAN上的1500多个软件包解决了部署中可能遇到的大多数问题

给个机会吧。您可以在这里以及rcpp-devel列表上获得帮助-先订阅,然后再发布。