[R-pkg-devel] How to pass a connection into a C function (R 3.2)

Duncan Murdoch murdoch.duncan at gmail.com
Thu Jan 21 18:42:55 CET 2016


On 21/01/2016 11:39 AM, Tom Quarendon wrote:
> I would like to implement a package that contains a C function that writes to a connection.
> So the R_ext/Connections.h defines what a connection IS, but not how to get one.
>
> What seems to work is to manually declare
> Rconnection getConnection(int n);
> In my C file, and while this works, and I can then use the connection object, it fails package validation with:
>
> �Found non-API call to R: �getConnection�
> Compiled code should not call non-API entry points in R.�
>
> So how am I supposed to do this? Is there a way? Or do I just live with the check warning (ideally not)?

The usual way to do that would be to create the connection in R code, 
and pass it in with your call.

If you don't know what connection you need at the time you call your C 
code, you can evaluate an R expression from C to do the same, but this 
is relatively tricky, so I'd advise the other method.

Duncan Murdoch



More information about the R-package-devel mailing list