[Rd] Small issue with R's C API

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Oct 25 17:26:13 CEST 2005


An R NULL does not map to a C NULL.

Please learn to distinguish documented facts from uninformed guesswork.

On Tue, 25 Oct 2005, Dominick Samperi wrote:

> Prof Brian Ripley wrote:
>> This is nothing to do with the C API: isVector and isMatrix are not
>> part of the API (see Writing R Extensions for what it is).  That's the
>> `issue' here.
>>
>> On Tue, 25 Oct 2005, Dominick Samperi wrote:
>>
>>> Consider the R code:
>>> mat <- matrix(seq(1,20),4,5)
>>> is.matrix(mat) # gives TRUE
>>> is.vector(mat) # gives FALSE
>>>
>>> On the other hand, if mat is passed through the .Call interface the
>>> corresponding SEXP (call it smat) satisfies
>>> isMatrix(smat)   // TRUE
>>> isVector(smat)  // TRUE
>>>
>>> Consequently, you cannot distinguish matrices from vectors. Looking
>>> at the dim attribute of a vector doesn't help because this is garbage.
>>
>> You can look to see if it has a dim attribute ... you could also look
>> at the C code for is.vector.
> The first option here does not seem to work. The code
>
> SEXP dimAttr = getAttrib(smat, R_DimSymbol)
>
> does not set dimAttr to 0 (NULL) wheh smat is actually a vector.
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

-- 
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



More information about the R-devel mailing list