Re: [Rd] Converting SEXP to primitive C types

From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>
Date: Tue 11 Jul 2006 - 19:17:40 GMT

On Tue, 11 Jul 2006, Michael Petrovich wrote:

> I'm new to R development, so this may be a trivial question.
>
> In C, How do you convert a SEXP value returned by an R function to a
> primitive C type (int, double, char, array, etc.)? I've tried using
> the INTEGER(x), VECTOR_ELT(x,i), and similar functions found in /src/
> include/Rinternals.h, but doing so results in incorrect results or a
> seg-fault.

See `Writing R Extensions', the documentation for that file. You cannot just guess that an object has the appropriate SEXPTYPE: you have to check it (or coerce to it). In your example it is likely to be a REALSXP (it could be an INTSXP), so you need to cover all possible cases.

> For example, I modified /tests/Embedding/Rerror.c so that it tries to
> print the value returned by the function defined in error.R:
>
> val = Test_tryEval(e, &errorOccurred);
> printf("Returned: {%d}\n", VECTOR_ELT(val, 0) );
>
> Where error.R is contains:
>
> foo <-
> function(x=3, y=6)
> {
> z <- x * y
> z
> }
>
> But the output is just "0", not the correct "18". Any ideas?
>
> Thanks for your help!

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Wed Jul 12 05:23:17 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Tue 11 Jul 2006 - 20:28:19 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.