Re: [Rd] behavior of as.integer(5000000000)

2015-04-17 Thread Martin Maechler
 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(50)
 [1] 2147483647
 Warning message:
 inaccurate integer conversion in coercion
 
  as.integer(-50)
 [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 - 5 * 8^-(0:7)
  as.integer(N)
 [1] NA NA NA NA 1220703125  152587890   
190734862384185
 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   
190734862384185
 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 50
 succeeded (for some definition of succeed).
 
 Also is there any reason why the warning message is different than
 with:
 
  as.integer(-50)
 [1] NA
 Warning message:
 NAs introduced by coercion
 
 In the case of as.integer(-50), 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).

BTW, the fact that as.integer(-50) did produce an NA
instead of -2147483647 so it would have been compatible with 
as.integer(50)
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

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


Re: [Rd] behavior of as.integer(5000000000)

2015-04-17 Thread Hervé Pagès



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(50)
  [1] 2147483647
  Warning message:
  inaccurate integer conversion in coercion
 
   as.integer(-50)
  [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 - 5 * 8^-(0:7)
   as.integer(N)
  [1] NA NA NA NA 1220703125  152587890  
 190734862384185
  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  
 190734862384185
  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 50
  succeeded (for some definition of succeed).
 
  Also is there any reason why the warning message is different than
  with:
 
   as.integer(-50)
  [1] NA
  Warning message:
  NAs introduced by coercion
 
  In the case of as.integer(-50), 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, -50))

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(-50) did produce an NA
  instead of -2147483647 so it would have been compatible with 
as.integer(50)
  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


Re: [Rd] behavior of as.integer(5000000000)

2015-04-17 Thread Hervé Pagès

Hi Martin,

On 04/17/2015 06:49 AM, Martin Maechler wrote:

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(50)
  [1] 2147483647
  Warning message:
  inaccurate integer conversion in coercion
 
   as.integer(-50)
  [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 - 5 * 8^-(0:7)
   as.integer(N)
  [1] NA NA NA NA 1220703125  152587890   
190734862384185
  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   
190734862384185
  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 50
  succeeded (for some definition of succeed).
 
  Also is there any reason why the warning message is different than
  with:
 
   as.integer(-50)
  [1] NA
  Warning message:
  NAs introduced by coercion
 
  In the case of as.integer(-50), 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).


Thanks. That's a much better warning message.



BTW, the fact that as.integer(-50) did produce an NA
instead of -2147483647 so it would have been compatible with 
as.integer(50)
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!]]


Yeah, I suspected that.

Thanks for the fix.

H.



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


Re: [Rd] behavior of as.integer(5000000000)

2015-04-14 Thread Martin Maechler

 Hi,
 as.integer(50)
[1] 2147483647
Warning message:
inaccurate integer conversion in coercion

 as.integer(-50)
[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 - 5 * 8^-(0:7)
   as.integer(N)
  [1] NA NA NA NA 1220703125  152587890   
190734862384185
  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   
190734862384185
  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 50
 succeeded (for some definition of succeed).

 Also is there any reason why the warning message is different than
 with:

 as.integer(-50)
[1] NA
Warning message:
NAs introduced by coercion

 In the case of as.integer(-50), 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.

Martin


 -- 
 Hervé Pagès
 ...

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


Re: [Rd] behavior of as.integer(5000000000)

2015-04-14 Thread Hervé Pagès

On 04/13/2015 11:32 PM, Martin Maechler wrote:



Hi,
 as.integer(50)
[1] 2147483647
Warning message:
inaccurate integer conversion in coercion



 as.integer(-50)
[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 - 5 * 8^-(0:7)
as.integer(N)
   [1] NA NA NA NA 1220703125  152587890   
190734862384185
   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   
190734862384185
   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 50
succeeded (for some definition of succeed).



Also is there any reason why the warning message is different than
with:



 as.integer(-50)
[1] NA
Warning message:
NAs introduced by coercion



In the case of as.integer(-50), 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,

H.



Martin



--
Hervé Pagès
...


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


Re: [Rd] behavior of as.integer(5000000000)

2015-04-14 Thread Avraham Adler
On Tue, Apr 14, 2015 at 1:19 AM, Hervé Pagès hpa...@fredhutch.org wrote:
 Hi,

as.integer(50)
   [1] 2147483647
   Warning message:
   inaccurate integer conversion in coercion

as.integer(-50)
   [1] NA
   Warning message:
   inaccurate integer conversion in coercion

 Is this a bug or a feature? The man page suggests it's the latter:


Hello, Hervé

Per help(as.integer): Note that current implementations of R use
32-bit integers for integer vectors, so the range of representable
integers is restricted to about +/-2*10^9: doubles can hold much
larger integers.

50 ~ 2^32.2  2^32  2*10^9

Avi



   ‘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 50
 succeeded (for some definition of succeed).

 Also is there any reason why the warning message is different than
 with:

as.integer(-50)
   [1] NA
   Warning message:
   NAs introduced by coercion

 In the case of as.integer(-50), 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.

 Thanks,
 H.

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

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


[Rd] behavior of as.integer(5000000000)

2015-04-13 Thread Hervé Pagès

Hi,

   as.integer(50)
  [1] 2147483647
  Warning message:
  inaccurate integer conversion in coercion

   as.integer(-50)
  [1] NA
  Warning message:
  inaccurate integer conversion in coercion

Is this a bug or a feature? The man page suggests it's the latter:

  ‘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 50
succeeded (for some definition of succeed).

Also is there any reason why the warning message is different than
with:

   as.integer(-50)
  [1] NA
  Warning message:
  NAs introduced by coercion

In the case of as.integer(-50), 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.

Thanks,
H.

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