R 是否可以更改SEXP中的数据指针?

R 是否可以更改SEXP中的数据指针?,r,rcpp,R,Rcpp,我将许多堆分配的双数组发送回R,并试图避免复制 我不想使用Rcpp::wrap,因为这涉及到一个副本。我也没有机会执行Rf_allocVector并将双指针实数(a)传递给我的C函数 由于每个SEXP都包含一个指向某个地方的原始数据的指针(对于REALSXP是double*)和一个垃圾收集器的refcount,因此我理想情况下希望这样做,假设R API有一个CHANGE\u data\u PTR宏: double *my_array = new double[N] // One of many

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

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

由于每个
SEXP
都包含一个指向某个地方的原始数据的指针(对于REALSXP是double*)和一个垃圾收集器的refcount,因此我理想情况下希望这样做,假设R API有一个
CHANGE\u data\u 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指针获得,并手动用
->

覆盖它,则不必求助于非常容易出错的黑客。SEXP中的内容来自R的内部内存管理,这通常与您的程序不可互换在堆中分配内存。请参阅编写R扩展以了解为什么R扩展不应使用普通
malloc()
等。谢谢,我已经阅读了整个文档(特别是)虽然我觉得这是非标准的,解决方案也很不确定,但我看不到一个明确的声明不允许这样做。也许可以看看外部指针文档,以及Rcpp的
XPtr
XPtrUtil
包。你可以管理自己的内存,让R别管它。但是不行内存块的“即插即用”互换性。