From ripley at stats.ox.ac.uk  Fri May  9 12:38:25 2008
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Fri, 9 May 2008 11:38:25 +0100 (BST)
Subject: [Rd] Have you ever experienced this problem with REAL in a C
 code
In-Reply-To: <48241D51.4060903@epfl.ch>
References: <48241D51.4060903@epfl.ch>
Message-ID: <alpine.LFD.1.10.0805091135070.24777@auk.stats.ox.ac.uk>

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:

>   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
>
> -- 
> Institute of Mathematics
> Ecole Polytechnique F?d?rale de Lausanne
> STAT-IMA-FSB-EPFL, Station 8
> CH-1015 Lausanne   Switzerland
> http://stat.epfl.ch/
> Tel: + 41 (0)21 693 7907
>
>

-- 
Brian D. Ripley,                  ripley at 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


[Rd] Have you ever experienced this problem with REAL in a C code
Prof Brian Ripley