R:从已编译代码中的现有连接读取

时间:2016-02-18 14:00:52

标签: r api connection

我希望能够从任意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结构的指针?

提前致谢。

2 个答案:

答案 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;
}