有没有一种方法可以创建由现有 C char* ptr 支持的 RAWSXP 向量。
下面我展示了需要重新分配和复制字节的当前工作版本,以及不存在的第二个想象版本。
// My current slow solution that uses lots of memory
SEXP getData() {
// has size, and data
Response resp = expensive_call();
//COPY OVER BYTE BY BYTE
SEXP respVec = Rf_allocVector(RAWSXP, resp.size);
Rbyte* ptr = RAW(respVec);
memcpy(ptr, resp.msg, resp.size);
// free the memory
free(resp.data);
return respVec;
}
// My imagined solution
SEXP getDataFast() {
// has size, and data
Response resp = expensive_call();
// reuse the ptr
SEXP respVec = Rf_allocVectorViaPtr(RAWSXP, resp.data, resp.size);
return respVec;
}
我还注意到Rf_allocVector3
这似乎可以控制向量的内存分配,但我无法让它工作。这是我第一次编写 R 扩展,所以我想我一定是在做一些愚蠢的事情。我试图避免复制,因为数据将在 GB 左右(非常大,虽然稀疏,矩阵)。