Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 505
user1603038 Avatar asked May 01 '13 16:05

user1603038


1 Answers

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
like image 194
Josh O'Brien Avatar answered Nov 16 '22 00:11

Josh O'Brien