可以从C或Fortran读取.Rdata文件格式吗?

我正在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。

使用.Call接口从C调用R函数并不太难。 因此,编写一个输入数据的R函数,并从C调用它。当您完成一个文件时,UNPROTECT()您读入的数据。这在下面说明

 ## function that reads my data in from a single file fun <- function(fl) readLines(fl) library(inline) ## party trick -- compile C code from within R doit <- cfunction(signature(fun="CLOSXP", filename="STRSXP", env="ENVSXP"), ' SEXP lng = PROTECT(lang2(fun, filename)); // create R language expression SEXP ans = PROTECT(eval(lng, env)); // evaluate the expression // do things with the ans, eg, ... int len = length(ans); UNPROTECT(2); // release for garbage collection return ScalarInteger(len); // return something ') doit(fun, "call.R", environment()) 

一种更简单的方法是反转问题 - 读入两个数据文件,然后用数据调用C.