[Rd] Small issue with R's C API

Dominick Samperi dsamperi at DecisionSynergy.com
Tue Oct 25 14:38:31 CEST 2005


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.
>
> Where did you find a definition of isVector?  There is one in the 
> comments in src/main/util.c.  It is not as you seem to be assuming a C 
> analogue of
> is.vector.
>
I probably grep-ed Rinternals.h, or looked in the section of that file 
for definitions similar to isMatrix, or just guessed that
if there is an isMatix, there probably is an isVector (I realize that 
there is no substitute for the manual when it comes to
finding things like isNewList, instead of the "guess" isList).

Thanks for the tip about looking at the code for is.vector...

Dominick



More information about the R-devel mailing list