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

StackOverflow https://stackoverflow.com/questions/16321760

  •  13-04-2022
  •  | 
  •  

Question

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?

Was it helpful?

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top