2013-05-01 65 views
7

我正在寻找一种通用方法来更改省略号内参数的值并将其传递给其他函数功能。我知道,一个丑陋的解决方案,它看起来像这样:R:更改省略号中参数的值并将省略号传递给另一个函数而不使用list()和eval()

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

test(x=1,y=1) 

理想我想避免转换......到一个列表,然后使用eval()。是否有可能以某种方式在名称内引用一个参数并更改它的值?

回答

8

您必须解压...才能操作其内容。这里的丑陋点真的是你的最后一行,可以简化为do.call(identical, a)

test <- function(...) { 
    a <- list(...) 
    a[['y']] <- 2 
    do.call(identical, a) 
} 

test(x=1,y=1) 
# [1] FALSE 
+0

对于'do.call(相同的,。)'! – 2013-05-01 16:29:41

+0

伟大的解决方案! – user1603038 2013-05-02 08:19:40