You do have to unpack ...
to manipulate its contents. The ugly bit here, really, is your last line, which can be simplified to do.call(identical, a)
:
test <- function(...) {
a <- list(...)
a[['y']] <- 2
do.call(identical, a)
}
test(x=1,y=1)
# [1] FALSE