[Rd] Returning vectors of two different data types back to R environment (from C).

statmobile at gmail.com statmobile at gmail.com
Sat Nov 17 01:32:49 CET 2007


On Fri, Nov 16, 2007 at 03:49:09PM -0500, Charles Danko wrote:
> Hello,
> 
> Quick question.
> 
> I have written a C function - I would like to make it return two vectors to
> the R environment - one STRSXP vector, and one INTSXP vector.  Is this
> possible/ easy to do using the API?
> 
> I looked, but could not find the answer to this  question in the "Writing R
> Extensions" guide.

Yes, it's really quite reasonable to do, although it's not documented
in detail in the R-extensions manual.  As stated earlier, this will
only work with .Call and SEXP functions where you can handle R objects
within C.  

In Section 5.9 "Evaluating R expressions in C" it has an example using
lists in C.  Basically, lists are VECSXP objects so you can search for
that in R-exts.

Also, I would recommend looking at 5.7.6 "Handling lists" and the
function: 

SEXP getListElement(SEXP list, char *str)

You should look for that, and then grep the source files for
examples.  If you don't have grep to search the files, then I would
recommend the R gonzui site:

http://rgonzui.nakama.ne.jp/

Personally, I found the source code for det() to be a useful example,
you can search for that on R gonzui.

Good Luck



More information about the R-devel mailing list