【发布时间】:2014-11-17 20:50:58
【问题描述】:
我正在编写一些关于 C 的 R 扩展(要从 R 调用的 C 函数)。
我的代码需要同时使用 2 个不同的数据集计算统计数据,并且我需要使用所有可能的配对组合来执行此操作。然后,我需要所有这些统计数据(非常大的数组)来继续 C 端的计算。这些文件非常大,通常约为 40GB,这就是我的问题。
要在 R 调用的 C 上执行此操作,首先我需要加载 R 中的所有数据集以将它们传递给 C 函数调用。但是,理想情况下,如果我能够直接从 C 或 Fortran 访问数据集,则可以按照顺序在内存中同时维护其中的 2 个文件:
open file1 - open file2 - compute cov(1,2)
close file2
hold file1 - open file3 - compute cov(1,3)
... // same approach
这在 R 上很好,因为我可以加载/卸载文件,但是在调用 C 或 Fortran 时,我没有任何机制来加载/卸载文件。所以,我的问题是,我可以直接从 Fortran 或 C 中读取 .Rdata 文件,并且能够打开/关闭它们吗?还有其他解决问题的方法吗?
据我所知,答案是否定的。所以,我正在考虑从 Rdata 迁移到 HDF5。
【问题讨论】:
-
当然! 可以读取任何文件格式,但问题是:值得付出努力吗?为什么不将大文件保存到单独的
.Rdata文件中并加载您想要的文件,或者按照您的建议,将它们保存为更简单的格式? -
即使将我的数据存储在不同的文件中,我也必须在从 R 调用 C 代码之前加载所有这些文件。如果可以在 C 和 R 代码之间维护一种流,那么您的方法是正确的...我相信使用更简单的格式是最好的选择。
标签: c r performance fortran hdf