在 R 中读取 C++ 二进制文件
Read C++ binary file in R
我可以在 R 中读取 C++ 编写的二进制文件吗?
我一直在我的 R 包中使用 Rcpp,模拟通常会生成大量数据。我打算用 C++ 将输出写入二进制文件,然后在 R 中读回这些文件。如果我将其写为文本文件,这会起作用,但我没有找到二进制文件的解决方案。如果我使用许多 NumericVectors 传递数据,程序有时会突然崩溃(我还没有完全理解使用 Rcpp 的内存管理)。
与传递向量相比,这种方法能否使我在 C++ 和 R 之间共享更大的数据集?在 C++ 中,最大向量大小受 RAM 和地址总线的限制(可能是?),但我认为 R 能够使用交换加载更大的向量。我是正确的还是误解了这些概念?
是的,你可以。但它是 "complicated".
您正在着手学习一个名为二进制序列化的主题。那里有 很多 的工作。从本质上讲,您处于
之间的连续体中
minimal:打开一个文件,写出N个二进制项;然后在另一边读取 N 个二进制文件。几年前我们在工作中做了类似的事情,用 <rows,cols,version>
写了一些元数据,然后 rows * cols
double 的二进制 blob 附加到矩阵
maximal:使用完全描述性的元语言,如 Protocol Buffer 或 MessagePack 来描述二进制内容,用 C++ 编写(使用适当的库)并在 R 中读回(使用相应的包---我分别参与了一个:RProtoBuf 和 RcppMsgPack)。
介于两者之间。如果你真的 只需要在 C(++) 和 R 之间进行通信,你可以尝试 RData / rds 格式。有一个库:librdata,我对它进行了试验(并提交了一些错误报告并提出了一些拉取请求)。我可能会从那里开始。
简而言之:做一些研究,弄清楚该做什么然后去做:)
PS 如果您通过 Rcpp 从 R 调用 C++,那么您可能不需要文件。我们可以来回传递大对象——限制可能是您的 RAM。
我可以在 R 中读取 C++ 编写的二进制文件吗?
我一直在我的 R 包中使用 Rcpp,模拟通常会生成大量数据。我打算用 C++ 将输出写入二进制文件,然后在 R 中读回这些文件。如果我将其写为文本文件,这会起作用,但我没有找到二进制文件的解决方案。如果我使用许多 NumericVectors 传递数据,程序有时会突然崩溃(我还没有完全理解使用 Rcpp 的内存管理)。
与传递向量相比,这种方法能否使我在 C++ 和 R 之间共享更大的数据集?在 C++ 中,最大向量大小受 RAM 和地址总线的限制(可能是?),但我认为 R 能够使用交换加载更大的向量。我是正确的还是误解了这些概念?
是的,你可以。但它是 "complicated".
您正在着手学习一个名为二进制序列化的主题。那里有 很多 的工作。从本质上讲,您处于
之间的连续体中minimal:打开一个文件,写出N个二进制项;然后在另一边读取 N 个二进制文件。几年前我们在工作中做了类似的事情,用
<rows,cols,version>
写了一些元数据,然后rows * cols
double 的二进制 blob 附加到矩阵maximal:使用完全描述性的元语言,如 Protocol Buffer 或 MessagePack 来描述二进制内容,用 C++ 编写(使用适当的库)并在 R 中读回(使用相应的包---我分别参与了一个:RProtoBuf 和 RcppMsgPack)。
介于两者之间。如果你真的 只需要在 C(++) 和 R 之间进行通信,你可以尝试 RData / rds 格式。有一个库:librdata,我对它进行了试验(并提交了一些错误报告并提出了一些拉取请求)。我可能会从那里开始。
简而言之:做一些研究,弄清楚该做什么然后去做:)
PS 如果您通过 Rcpp 从 R 调用 C++,那么您可能不需要文件。我们可以来回传递大对象——限制可能是您的 RAM。