Skip to content

Have you ever experienced this problem with REAL in a C code

3 messages · Brian Ripley, Mathieu Ribatet

#
Dear all,

I'm currently experiencing big troubles with my C code called by .Call 
in a R function.

I know this may not be the right place for such things but these errors 
are driving me crazy. And I hope other people may have already 
experienced these problems so that they could give me good suggestions.
Sorry if I'm completely out of topic.

Well let's go...

I'm writing a MCMC algo for Bayesian analysis. The MCMC part is written 
in C but call R objects (e.g. output and arguments are SEXP). The C is 
called by a wrapper R function through .Call. The posterior density is 
computed using a R code that calls 2 different codes: one for the prior 
distribution and one for the likelihood. The prior distribution is fully 
written in R while the likelihood is computed using a C code. Both of 
these codes are (seem to be) ok and *always* return numeric - and no 
special values as Inf, NA,...

When I'm running my codes (enclosed you'll find the C code), I get one 
of the following error - *when error occurs*:

Error in gibbs(1000, init, prior.p, "whitmat", data = ms1, coord = 
locations,  :
  REAL() can only be applied to a 'numeric', not a 'raw'

or

Error in gibbs(1000, init, prior.p, "whitmat", data = ms1, coord = 
locations,  :
  REAL() can only be applied to a 'numeric', not a 'list'

or

Error in gibbs(1000, init, prior.p, "whitmat", data = ms1, coord = 
locations,  :
  REAL() can only be applied to a 'numeric', not an 'integer'

The problem is that REAL seems not to be applied to a list (I've got no 
list objects), and not to an integer too.
I checked for wrong allocation memory, infinite values but found nothing...

Any suggestions for possible reasons would be definitively appreciated.
Again, if this mail has no reason to be in this list; sorry and forget it.
Best,
Mathieu
#
These messages mean that R's internal code is encountering the wrong 
SEXPTYPE.  This almost always means one of

- lact of PROTECTion, so objects have been garbage-collected before use.

- memory corruption, most often by writing outside array bounds.

See the chapter in 'Writing R Extensions' about this,  and if possible 
make use of valgrind.
On Fri, 9 May 2008, Mathieu Ribatet wrote:

            

  
    
#
Thanks. These are good suggestions. I'll have a closer look (again) at 
the code.
Best,
Mathieu

Prof Brian Ripley a ?crit :