On 04/17/2015 08:24 AM, Martin Maechler wrote:
Martin Maechler <maech...@lynne.stat.math.ethz.ch>
     on Fri, 17 Apr 2015 15:49:35 +0200 writes:

Hervé Pagès <hpa...@fredhutch.org>
     on Mon, 13 Apr 2015 23:36:14 -0700 writes:

     >> On 04/13/2015 11:32 PM, Martin Maechler wrote:
     >>>
     >>>> Hi,
     >>>> > as.integer("5000000000")
     >>>> [1] 2147483647
     >>>> Warning message:
     >>>> inaccurate integer conversion in coercion
     >>>
     >>>> > as.integer("-5000000000")
     >>>> [1] NA
     >>>> Warning message:
     >>>> inaccurate integer conversion in coercion
     >>>
     >>>> Is this a bug or a feature? The man page suggests it's the
     >>>> latter:
     >>>
     >>> I think you mean the "former", a bug.
     >>>
     >>> and I agree entirely, see the following  " 2 x 2 " comparison :
     >>>
     >>> > N <- 5000000000000 * 8^-(0:7)
     >>> > as.integer(N)
     >>> [1]         NA         NA         NA         NA 1220703125  152587890  
 19073486    2384185
     >>> Warning message:
     >>> NAs introduced by coercion
     >>> > as.integer(-N)
     >>> [1]          NA          NA          NA          NA -1220703125  
-152587890   -19073486
     >>> [8]    -2384185
     >>> Warning message:
     >>> NAs introduced by coercion
     >>> > as.integer(as.character(N))
     >>> [1] 2147483647 2147483647 2147483647 2147483647 1220703125  152587890  
 19073486    2384185
     >>> Warning message:
     >>> inaccurate integer conversion in coercion
     >>> > as.integer(as.character(-N))
     >>> [1]          NA          NA          NA          NA -1220703125  
-152587890   -19073486
     >>> [8]    -2384185
     >>> Warning message:
     >>> inaccurate integer conversion in coercion
     >>>
     >>>
     >>>
     >>>> ‘as.integer’ attempts to coerce its argument to be of integer
     >>>> type.  The answer will be ‘NA’ unless the coercion succeeds.
     >>>
     >>>> even though someone could always argue that coercion of "5000000000"
     >>>> succeeded (for some definition of "succeed").
     >>>
     >>>> Also is there any reason why the warning message is different than
     >>>> with:
     >>>
     >>>> > as.integer(-5000000000)
     >>>> [1] NA
     >>>> Warning message:
     >>>> NAs introduced by coercion
     >>>
     >>>> In the case of as.integer("-5000000000"), it's not really that the
     >>>> conversion was "inaccurate", it's a little bit worse than that. And
     >>>> knowing that NAs where introduced by coercion is important.
     >>>
     >>> Yes.
     >>> The message is less a problem than the bug, but I agree we
     >>> should try to improve it.

     >> Sounds good. Thanks Martin,

     > I've committed a change to R-devel now, such that also this case
     > returns NA with a warning, actually for the moment with both the
     > old warning and the   'NAs introduced by coercion' warning.
     > The "nice thing" about the old warning is that it explicitly
     > mentions integer coercion.

     > I currently think we should keep that property, and I'd propose
     > to completely drop the
     > "inaccurate integer conversion in coercion"
     > warning (it is not used anywhere else currently) and replace it
     > in this and other as.integer(.) cases with

     > 'NAs introduced by integer coercion'

     > (or something similar. ... improvements / proposals are welcome).

Replying to myself:

I've found

      'NAs introduced by coercion to integer range'

I like that we see "coercion *to* integer" instead of just
"integer coercion" because the former indicates the direction
of the coercion. I'm not that convinced with the "range" thing
though. I think

  as.integer(c("78", "a34", "-5000000000"))

should emit only one warning and not try to categorize the
reasons for getting an NA.

Thanks,
H.


to be even more "on spot", and so will commit it for today.
Of course, amendment proposals are still welcome.

Martin



     > BTW, the fact that as.integer("-5000000000") did produce an NA
     > instead of -2147483647 so it would have been compatible with 
as.integer("5000000000")
     > was just another coincidence, namely that we "currently" code NA_integer_
     > by INT_MIN (for 32 bit integers, INT_MIN = 2147483648 = 2^31)
     > [[but your C code must not rely on that, it is an implementation 
detail!]]

     > Martin


--
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpa...@fredhutch.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to