[Rd] Bug in comparison of language objects?

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Tue Feb 20 14:47:30 CET 2024


On 20/02/2024 8:03 a.m., Duncan Murdoch wrote:
> I noticed the following odd behaviour today:
> 
>     exprs <- expression( mean(a), mean(b), { a }, { b } )
> 
>     exprs[[1]] == exprs[[2]]
>     #> [1] FALSE
> 
>     exprs[[3]] == exprs[[4]]
>     #> [1] TRUE
> 
> Does it make sense to anyone that the argument passed to `mean` matters,
> but the expression contained in braces doesn't?

I have done some debugging, and found the cause:  for the comparison of 
language objects, R deparses them to strings using C function 
deparse1(), and looks at only the first line.  "mean(a)" deparses as is, 
but "{ a }" deparses to 3 lines

{
   a
}

and the first line is the same as for "{ b }", so they compare equal.

I think it would make more sense to deparse them to one long string, and 
compare those, i.e. to replace deparse1() with deparse1line() (which may 
have been the intention).

Duncan Murdoch



More information about the R-devel mailing list