[Rd] Small issue with R's C API

Dominick Samperi dsamperi at DecisionSynergy.com
Tue Oct 25 15:34:24 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.
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.



More information about the R-devel mailing list