[Rd] missing IntegerFromString()

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Jun 7 19:27:22 CEST 2007


On Thu, 7 Jun 2007, Prof Brian Ripley wrote:

> On Thu, 7 Jun 2007, Douglas Bates wrote:
>
>> On 6/6/07, Aniko Szabo <aszabo at hpi.mcw.edu> wrote:
>>> Thanks to everybody who responded to my question.
>>> asInteger(coerceVector(x,INTSXP)) indeed does what I need. I guess there
>>> is a lot I don't understand about type coercion, as I would not have
>>> expected it to work.
>>
>> It is better to use
>>
>> asInteger(x)
>>
>> which will do the coercion if necessary.  When you do the coercion
>> yourself you should PROTECT the result then UNPROTECT it.  Calling
>> asInteger directly avoids this overhead without the risk of losing
>> data in a garbage collection.  asInteger can accomplish this because
>> only the first element of the SEXP x is converted to an integer.
>
> I have to say I am puzzled.  IntegerFromString works on a CHARSXP, and
> furthermore does not check its argument (which is one reason why it is no
> longer even exposed).  AFAICS, coerceVector(x,INTSXP) will not accept a
> CHARSXP, but it will accept a STRSXP.  (The same for asInteger.)

I should have added 'The same for asInteger in R-devel'.  I forgot to 
check R 2.5.0 (and suspect others did the same).

> So two ways to do this for vector 'x' are
>
> asInteger(x)
> INTEGER(coerceVector(x,INTSXP))[0]
>
> provided in the second case you know 'x' has length at least 1.  But the
> first is both safer and more efficient.
>
> If you really have a CHARSXP, then you are not really supposed to work
> with 'bare' CHARSXPs unless you know what you are doing (in which case you
> don't need to ask ...).
>
>>
>>>
>>> Aniko
>>>
>>> -----Original Message-----
>>> From: Seth Falcon [mailto:sfalcon at fhcrc.org]
>>> Sent: Tuesday, June 05, 2007 11:24 PM
>>> To: Aniko Szabo
>>> Cc: r-devel at r-project.org
>>> Subject: Re: [Rd] missing IntegerFromString()
>>>
>>> Hi Aniko,
>>>
>>> "Aniko Szabo" <aszabo at hpi.mcw.edu> writes:
>>>
>>>> I have created a DLL not so long ago using C code. My code used the
>>>> IntegerFromString() function that used to be exported in the
>>>> Rinternals.h header file (and thus easily accessible). Recently I
>>>> upgraded to R 2.5.0 and my DLL stopped working. I see that the
>>>> IntegerFromString() function is not exported in any of the header
>>> files
>>>> in the RHOME\include directory. Is it possible for me to use it
>>> without
>>>> installing all R source files? I can see that the function is in
>>>> coerce.c, however it #includes other stuff that I don't have and I am
>>>> afraid to mess things about by doing things I don't understand. Or
>>>> perhaps there is another function that is intended to be used
>>>> instead?
>>>
>>> I think you want asInteger (which calls IntegerFromString).  This is
>>> in RHOME/include/Rinternals.h
>>>
>>> Best Wishes,
>>>
>>> + seth
>>>
>>> PS: Nice to see you again :-)
>>>
>>>
>>> --
>>> Seth Falcon | Computational Biology | Fred Hutchinson Cancer Research
>>> Center
>>> http://bioconductor.org
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



More information about the R-devel mailing list