[Rd] missing IntegerFromString()

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Jun 7 17:59:39 CEST 2007

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.)

So two ways to do this for vector 'x' are


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