From dsamperi at DecisionSynergy.com  Tue Oct 25 14:38:31 2005
From: dsamperi at DecisionSynergy.com (Dominick Samperi)
Date: Tue, 25 Oct 2005 08:38:31 -0400
Subject: [Rd] Small issue with R's C API
In-Reply-To: <Pine.LNX.4.61.0510251254220.10299@gannet.stats>
References: <435E1A4D.102@DecisionSynergy.com>
	<Pine.LNX.4.61.0510251254220.10299@gannet.stats>
Message-ID: <435E2747.7090008@DecisionSynergy.com>

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



[Rd] Small issue with R's C API
Dominick Samperi