Что я пробовал:
#include <Rcpp.h>
#include <fstream>
using namespace Rcpp;
using namespace std;
// [[Rcpp::export]]
void write_indval(const char * filename,
const IntegerVector& i,
const NumericVector& x) {
ofstream myFile(filename, ios::out | ios::binary);
const int * pI = i.begin();
const double * pX = x.begin();
int K = i.size();
for (int k = 0; k < K; k++, pI++, pX++) {
myFile.write(reinterpret_cast<const char*>(pI), 4);
myFile.write(reinterpret_cast<const char*>(pX), 8);
}
myFile.close();
}
Если я попробую это в R:
N <- 1e8
i <- sample(1000, N, replace = TRUE)
x <- runif(N)
system.time(
write_indval("test.bin", i, x)
)
Для записи данных объемом 1,1 ГБ потребуется 16 секунд. Кажется, что записанные данные - то, что я хочу, но я пишу со скоростью 72 МБ / с c. Я думаю, что я могу написать на 300 МБ / с c на моем компьютере. Итак, кто-нибудь знает более быструю альтернативу этой функции?