From maechler at stat.math.ethz.ch  Tue Jul 24 09:34:50 2007
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Tue, 24 Jul 2007 09:34:50 +0200
Subject: [Rd] CHAR(STRING_ELT( - OK but CHAR(asChar(STRING_ELT( - not,
	why?
In-Reply-To: <Pine.LNX.4.64.0707231254420.30373@gannet.stats.ox.ac.uk>
References: <1185189270.6294.69.camel@dirac>
	<Pine.LNX.4.64.0707231254420.30373@gannet.stats.ox.ac.uk>
Message-ID: <18085.43930.736077.332525@stat.math.ethz.ch>

>>>>> "BDR" == Prof Brian Ripley <ripley at stats.ox.ac.uk>
>>>>>     on Mon, 23 Jul 2007 13:22:16 +0100 (BST) writes:


    BDR> I think you are asking why calling asChar on a CHARSXP gives NA_STRING. 
    BDR> In particular, the calls you mention *are* perfectly OK and work as 
    BDR> intended.

    BDR> As barely documented in R-exts, asChar is designed for vector arguments: a 
    BDR> CHARSXP is not a vector.  It gives NA_STRING for invalid inputs.
    BDR> The asXXXX family of functions are designed to coerce as necessary user 
    BDR> inputs, and CHARSXPs are not visible at R level.

    BDR> In general, with internal functions you are expected to
    BDR> read the code to find out what they do before using
    BDR> them.

[..............]


    BDR> There is no R '2.4', but the behaviour of asChar was the same in R 2.4.0
    BDR> except for the adding of SYMSXP at

    BDR> -------------
    BDR> r40358 | maechler | 2007-01-04 11:07:04 +0000 (Thu, 04 Jan 2007) | 1 line

    BDR> eliminate CHAR_STAR in methods/src/ as per old "todo"
    BDR> -------------

    BDR> which message does not help me at all.  Perhaps Martin can explain?

I had to " svn diff -r40357:40358 " to see :

What I did was to basically add

 	else if(TYPEOF(x) == SYMSXP)
 	    return PRINTNAME(x);

to asChar()  which allowed to eliminate a macro and a similar if() 
in C code from methods where there's been a long standing "TODO"
about this.

The only change this could have was to *not* return an NA
in the 'symbol/name' cases it gave NA before.

Martin



[Rd] CHAR(STRING_ELT( - OK but CHAR(asChar(STRING_ELT( - not, why?
Martin Maechler