4

我将许多堆分配的双数组发送回 R,并试图避免复制。

我不想使用 Rcpp::wrap 因为这涉及到副本。我也没有机会Rf_allocVector将双指针 REAL(a) 传递给我的 C 函数。

由于每个都SEXP包含一个指向某个地方的原始数据的指针(对于 REALSXP 是 double*)和一个垃圾收集器的引用计数,所以我理想地希望做这样的事情,假装 R API 有一个CHANGE_DATA_PTR宏:

double *my_array = new double[N] // One of many big heap allocated (not with Rs allocator) double arrays I wish to return to R without copies

SEXP my_array_R = PROTECT(Rf_allocVector(REALSXP, 0)) // Initialize an empty R vector

CHANGE_DATA_PTR(my_array_R) = my_array;

UNPROTECT(1)

return my_array_R;

这可能吗?(如果手动查找数据指针是否可以从不透明的 SEXP 指针中获取并用->.

4

0 回答 0