Unfortunately, Adrian, even trying to coerce a string like "--" to numeric just 
produces an NA and comparison fails:

> as.numeric("--") < 0 
[1] NA
Warning message:
NAs introduced by coercion

The same is true of anything that is character as it cannot be coerced.

> as.numeric("anything") < 0 
[1] NA
Warning message:
NAs introduced by coercion

So, the only rational thing R can do is convert the zero to a character string 
and that has the usual problem as in:

> as.character(20) < as.character(9)
[1] TRUE

Can you suggest if there is any valid result in some cases like these? I mean, 
if we wrote a function like greater(first, second) and set it up so it analyzed 
the types of the arguments and tried various combinations of converting things 
to one of several possible types such as integer/numeric/character/logical/raw 
and examined the results of each while catching errors, what would be a right 
answer it could get?

My guess is that it may not be possible in some cases to give an answer other 
than that the two being compared are incompatible. The result of greater() 
could be neither TRUE, nor FALSE but something like one of the NA family or 
maybe a NaN or maybe the function would simply throw an error and fail.

I can picture many other scenarios such as asking it to compare two objects, 
perhaps the same type or different types, such as a list versus a matrix. 
Realistically, the ">" operator and other such operators are not designed to do 
deep analyses and be able to compare complex-objects component by component and 
recursively. 

So the result you show, is in some sense nonsense. It is so wrong that it is 
not even wrong. My intuition is that it is similar to this:

> NA + 5
[1] NA

Any computation containing a crucial NA, typically ends up with an NA result 
because once you introduce uncertainty, it propagates. So the result of 
comparing things that cannot be compared may well also be polluted and should 
come back as an NA, probably the default logical form, not something like 
NA_integer_ 

Since comparisons between random objects are something that can happen, I 
suspect there are functions already part of the R distribution or in some 
packages that behave better and can safely be used to ask if things can even be 
compared. But there may yet remain edge cases because of things like character 
strings that can be evaluated as numeric but may not be evaluated correctly if 
they are written in some way as in hexadecimal notation or scientific notation.


-----Original Message-----
From: R-help <r-help-boun...@r-project.org> On Behalf Of Adrian Dusa
Sent: Tuesday, June 25, 2024 4:59 AM
To: Martin Maechler <maech...@stat.math.ethz.ch>
Cc: r-help@r-project.org
Subject: Re: [R] "--" < 0

Oh I see...
It's not that "-7" gets coerced to numeric, but 0 gets coerced to "0".
Of course...

On Tue, Jun 25, 2024 at 11:02 AM Martin Maechler <maech...@stat.math.ethz.ch>
wrote:

> >>>>> Adrian Dusa
> >>>>>     on Tue, 25 Jun 2024 10:56:07 +0300 writes:
>
>     > Dear R fellows,
>
>     >> From time to time, just when I thought I knew my R, I get
>     >> bitten by some
>     > small things that reminds one to constantly return to the
>     > basics.
>
>     > I knew for instance that "-1" < 0 is TRUE, presumably
>     > because R first coerces to numeric before comparing with
>     > 0.
>
>     > But I did not expect that "--" < 0 is a TRUE statement.
>     > (and the same holds for any string prepended by a minus
>     > sign, e.g. "-a" < 0)
>
>     > I would be grateful for an explanation, I'm sure that
>     > something very obvious escapes me but it sure does seem
>     > counter intuitive to me.
>
>     > Best wishes, Adrian
>
>     >   [[alternative HTML version deleted]]
>
> Nice, quiz, yes.
>
> You must have forgotten that all Op's (+,-, <= , &, | ..)
> must coerce to common type.
>
> ... and so does  c()  where coercion is defined a bit more.
>
> -->  does  c("--", 0)   give you a clue, now ?
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to