[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