[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