[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