[Rd] "==" for calls and expressions ??

Martin Maechler Martin Maechler <maechler@stat.math.ethz.ch>
Fri, 15 Sep 2000 17:10:33 +0200

{following up myself on the     NULL == NULL   topic}

I found	that 
	 x == y
is allowed in R when x and y are (generalized) ``Vectors''
(accidentally, I'm quite sure !), which includes
lists and  expressions, but the result is pretty `funny' in some cases, e.g.

    > e3 <- expression(1,x,x^2)
    > e3 == expression(1,x,x^2)
    > e3 == e3 ## all TRUE..

Note that it's not just "==", but all 6 relation operators ( "!=", "<", ...).

It's been quite easy for me to make R produce an error in these cases
{the same as for

  > cl <- quote(sin(x)) ; cl == cl
  Error in cl == cl : comparison (1) is possible only for vector types
But with that "make check" would fail
(we have at least on case in the examples where we test equality of two expr)
and it might be that people's R code already is doing these comparisons
with list()s and expression()s.

What should be done?

One possibility would be to make these work for call()s and expressions,
by using deparse(.) on the non-symbol calls
{symbol calls already *do* work -- and this is *not* accidental :

  > cl <- as.name("X"); cl == cl; cl > cl
  [1] TRUE
  [1] FALSE
and dealing with expressions as "vector of calls".
It is still less clear how list()s should be dealt with.

We really have the problem of differing 
backcompatibility to R and compatibility to S
(in S, these rel.ops only apply to atomic objects and NULL).


r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch