From @nto|ne@|@br| @end|ng |rom gm@||@com  Sat Jan  2 20:15:40 2021
From: @nto|ne@|@br| @end|ng |rom gm@||@com (Antoine Fabri)
Date: Sat, 2 Jan 2021 20:15:40 +0100
Subject: [Rd] `merge()` not consistent in how it treats list columns
Message-ID: <CAEKh8ujHeMMYHrN3kZcn5JXxMacs5hOW6cWRB1Z9HGuSKTEMAA@mail.gmail.com>

Dear R-devel,

When trying to merge 2 data frames by an "id" column, with this column a
character in one of them, and a list of character in the other, merge
behaves differently depending which is given first.

Example :

```
df1 <- data.frame(a=1)
df2 <- data.frame(b=2)
df1$id <- "ID"
df2$id <- list("ID")

# these print in a similar way, so the upcoming error will be hard to
diagnose
df1
#>   a id
#> 1 1 ID
df2
#>   b id
#> 1 2 ID

# especially as this works well, df2$id is treated as an atomic vector
merge(df1, df2)
#>   id a b
#> 1 ID 1 2

# But this fails with a cryptic error message
merge(df2, df1)
#> Error in sort.list(bx[m$xi]): 'x' must be atomic for 'sort.list', method
"shell" and "quick"
#> Have you called 'sort' on a list?
```

I believe that if we let it work one way it should work the other, and that
if it works neither an explicit error  mentioning how we can't join by list
column would be helpful.

Many thanks and happy new year to all the R community,

Antoine

	[[alternative HTML version deleted]]



[Rd] `merge()` not consistent in how it treats list columns
Antoine Fabri