我希望能够从任意R连接(在@invoices = Invoice.includes(subscription: [user: :licenses]).where("licenses.created_at NOT BETWEEN ? AND ?", from_date, to_date)
意义上)读取,该连接将由用户传递给R函数,然后通过{{传递到某些C代码中1}}。
文件?connections
中的R API指定了一个函数.Call
,它将指向R_ext/Connections.h
结构的指针作为其第一个参数,然后执行我想要的操作。结构本身也在该标头中定义,但除了R_ReadConnection
(C函数)之外,我认为无法检索该类型的结构,这不是API的一部分。据我所知,与连接关联的外部指针也没有直接指向结构。
那么,有人可以告诉我是否有一种支持的方法可以将合适的Rconn
转换为指向相关getConnection
结构的指针?
提前致谢。
答案 0 :(得分:1)
我认为不存在(这是一种疏忽,我认为)。解决方法是声明一个合适的原型并使用它
Rconnection getConnection(int n);
SEXP connect_me(SEXP conn) {
getConnection(INTEGER(conn)[0]);
return R_NilValue;
}
答案 1 :(得分:1)
R API函数R_GetConnection()
在R 3.3.0中添加为documented in NEWS
。它执行从SEXP
到指针Rconn
(a.k.a。Rconnection
)的转换。因此,解决方案现在是
#include <R_ext/Connections.h>
SEXP myfunction (SEXP conn_)
{
Rconnection conn = R_GetConnection(conn_);
// Do something with the connection
return R_NilValue;
}