在R中读取C ++二进制文件

用户名

我可以在R中读取C ++编写的二进制文件吗?

我在R包中一直使用Rcpp,而模拟通常会生成大量数据。我打算将输出写入C ++的二进制文件中,然后再用R读取。如果我以文本文件的形式写入,但找不到二进制文件的解决方案,则此方法有效。如果我使用许多NumericVectors传递数据,程序有时会突然崩溃(我尚未完全了解使用Rcpp进行的内存管理)。

与传递向量相比,这种方法能否使我在C ++和R之间共享更大的数据集?在C ++中,最大向量大小受RAM和地址总线(可能是?)限制,但我认为R能够使用swap加载更大的向量。我是正确的还是误解了这些概念?

德克·埃德比布特尔

是的你可以。但这很“复杂”。

您正在从事一个称为二进制序列化的主题。那里有很多工作。本质上,您处于以下两者之间的连续性中

  • 最少:打开一个文件,写出N个二进制项;然后在另一侧读取N个二进制文件。几年前,我们在工作中做了类似的工作,先写了一些元数据,<rows,cols,version>然后将二进制的blobrows * cols附加到矩阵上

  • 最大:使用完全描述性的元语言(例如Protocol Buffer或MessagePack)来描述二进制内容,以C ++编写(使用适当的库)并以R形式读回(使用相应的包-我每个都涉及到: RProtoBuf和RcppMsgPack)。

介于两者之间。如果您真的只需要在C(++)和R之间进行通信,则可以尝试RData / rds格式。有一个库:librdata和我进行了实验(并提交了一些错误报告并提出了一些拉取请求)。我可能从这里开始。

简而言之:做一些研究,弄清楚该怎么做,然后再做:)

PS:如果您从R通过Rcpp调用C ++,则可能不需要文件。我们可以来回传递大型对象-限制可能是您的RAM。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章