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

左心房为你撑大大i 提交于 2019-12-03 12:56:04

问题


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?


回答1:


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


来源:https://stackoverflow.com/questions/16321760/r-change-value-of-an-argument-in-ellipsis-and-pass-ellipsis-to-the-other-functi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!