[R-SIG-Mac]Re: A mac/win difference in R1.4.0

Stefano Iacus jago@mclink.it
Tue, 15 Jan 2002 15:19:10 +0100


Effectively it was a bug in the Mac version concerning the enum 
convention. I had activated the switch on MRC to initialize correctly 
the enum types.

I'll commit changes shortly.

thanks to Peter and Luke.

stefano

On Marted́, gennaio 15, 2002, at 02:49 , Luke Tierney wrote:

> The windows behavior is the correct one.  On the Carbon Mac version
>
> if (as.logical(NA)) 1 else 0
> if (logical(0)) 1 else 0
>
> both return 0 instead of signaling an error.
>
> I think the problem may be the declaration of Rboolean in Rmath.h as
>
> typedef enum { FALSE = 0, TRUE } Rboolean;
>
> In fact, there is a third possible value, NA_LOGICAL, which is
>
> #define NA_LOGICAL	R_NaInt
>
> and R_NaInt is usually INT_MIN.
>
> I suspect the MPW compiler Stefano uses gives sizeof(Rboolean) = 1 but
> most other compilers use sizeof(Rboolean) = sizeof(int).  There may be
> a switch to MPW C that tells it to allocate enums as full int's.  On
> the other hand, I don't know the legalities here but I suspect that
> this behavior is legal, so we might run into it elsewhere.  If so we
> should fix it in the sources.  Not sure of the best way to do it.
> Something like
>
> typedef enum { FALSE = 0, TRUE = 1, NA_LOGICAL = NA_INTEGER } Rboolean;
>
> would do in spirit, but NA_INTEGER expands to R_NaInt, so that would
> need some further juggling.
>
> luke
>
> On Mon, Jan 14, 2002 at 07:31:08PM -0500, Peter Macdonald wrote:
>> Here is a simpler example of the inconsistency:
>>
>> On Windows R 1.4.0
>>
>>> if(NULL == "A") print("Yes") else print("No")
>> Error in if (NULL == "A") print("Yes") else print("No") :
>>         missing value where logical needed
>>
>> On Mac R 1.4.0
>>
>>> if(NULL == "A") print("Yes") else print("No")
>> [1] "No"
>>
>> *~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*
>>  Peter D.M. Macdonald, D.Phil.      McMaster University
>>  Professor of Math & Statistics     Hamilton, Ontario, Canada L8S 4K1
>> *~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*
>>
>>
>> On Sat, 12 Jan 2002, Peter Macdonald wrote:
>>
>>> Can anyone give me insight on this or suggest a better way? Thanks!
>>>
>>> On the Mac I can write
>>>
>>>     invmat <- try(solve(hessian/2))
>>>     if (class(invmat) == "try-error")
>>>         invmat <- matrix(NA, nrow = nrow(hessian), ncol = 
>>> ncol(hessian))
>>>
>>> But in Windows I have to add a test for null class or I get a fatal 
>>> error
>>> at the == when class is null
>>>
>>>     invmat <- try(solve(hessian/2))
>>>     if (!is.null(class(invmat)))
>>>         if (class(invmat) == "try-error")
>>>             invmat <- matrix(NA, nrow = nrow(hessian), ncol =
>>> ncol(hessian))
>>>
>>>
>>> *~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*
>>>  Peter D.M. Macdonald, D.Phil.      McMaster University
>>>  Professor of Math & Statistics     Hamilton, Ontario, Canada L8S 4K1
>>> *~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*
>>>
>>>
>>>
>>
>> _______________________________________________
>> R-SIG-Mac mailing list
>> R-SIG-Mac@stat.math.ethz.ch
>> http://www.stat.math.ethz.ch/mailman/listinfo/r-sig-mac
>
> --
> Luke Tierney
> University of Minnesota                      Phone:           
> 612-625-7843
> School of Statistics                         Fax:             
> 612-624-8868
> 313 Ford Hall, 224 Church St. S.E.           email:      
> luke@stat.umn.edu
> Minneapolis, MN 55455 USA                    WWW:  
> http://www.stat.umn.edu
>