2013-05-01 11 views
7

Üç noktadaki bir argümanın değerini değiştirmek ve diğerine aktarmak için evrensel bir yol arıyorum. işlevi. Şöyle bunun için çirkin bir çözüm, biliyorum:R: Ellipsis'te bir argümanın değerini değiştirin ve listeyi() ve eval() kullanmadan diğer fonksiyona üç noktadan geçiş yapın()

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

test(x=1,y=1) 

İdeal dönüştürerek önlemek istiyorum ... bir listeye ve ardından() eval kullanarak. Bir şekilde bir argümana başvurmak mümkün müdür?

cevap

8

İçeriğini değiştirmek için ... paketini açmanız gerekir. (Özdeş.)

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

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

+1 'do.call için': Burada çirkin, gerçekten biraz, do.call(identical, a) basitleştiirlebilir son çizgi, bir! –

+0

Harika çözüm! – user1603038

İlgili konular