Search code examples
rfunctionellipsis

R: Change value of an argument in ellipsis and pass ellipsis to the other function without using list() and eval()


I am looking for a universal way to change a value of an argument inside ellipsis and pass it to the other function. I know an ugly solution for that, which looks like this:

test <- function(...) {
  a <- list(...)
  a[['y']] <- 2
  return(eval(parse(text=paste0('identical(',paste(unlist(a),collapse=','),')'))))
}

test(x=1,y=1)

Ideally I would like to avoid converting ... to a list and then using eval(). Is it possible to somehow refer to an argument inside ... by name and change it's value?


Solution

  • 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