gpt4 book ai didi

r - 如何使用 Rcpp 将 C 库中的 C 结构暴露给 R

转载 作者:行者123 更新时间:2023-12-01 03:55:25 27 4
gpt4 key购买 nike

我正在尝试将 C 库中的 C 结构公开到 R 中。例如:

struct A {
int flag;
// ...
}

库提供API来构造和销毁是很常见的 A :
A* initA();
void freeA(A* a);

感谢 RCPP_MODULE , 很容易暴露它而不考虑析构函数:
#include <Rcpp.h>

using namespace Rcpp;

RCPP_EXPOSED_CLASS(A)

RCPP_MODULE(A) {
class_<A>("A")
.field("flag", &A::flag)
;
}

//'@export
//[[Rcpp::export]]
SEXP init() {
BEGIN_RCPP
return wrap(*initA());
END_RCPP
}

我喜欢这种方法,但它可能会导致内存泄漏,因为它不会破坏 A在垃圾收集期间正确。添加 .finalizer(freeA)RCPP_MODULE将导致错误 free两次。

使用 XPtr<A, freeA>可能是一个解决方案,但我需要手动定义函数来公开 A.flag .

一般来说,如何使用 Rcpp 将 C 库中的 C 结构暴露到 R 中?

最佳答案

我建议你把你的 C 结构变成一个 C++ 类,它允许你在构造函数中分配并在析构函数中释放。

您仍然可以使用不同的方法在 R 和 C++ 之间轻松地进行类转换 --- 模块是几种可能性之一。

关于r - 如何使用 Rcpp 将 C 库中的 C 结构暴露给 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17715790/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com