2013-05-01 26 views
7

Poszukuję uniwersalnego sposobu zmiany wartości argumentu wewnątrz elipsy i przekazania go drugiej funkcjonować. Znam brzydkie rozwiązanie, które, który wygląda tak:R: Zmień wartość argumentu w elipsie i przeprowadź ellipsis do drugiej funkcji bez użycia list() i eval()

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

test(x=1,y=1) 

Idealnie chciałbym uniknąć konwersji ... do listy, a następnie za pomocą eval(). Czy można w jakiś sposób odnieść się do argumentu wewnątrz ... po imieniu i zmienić jego wartość?

Odpowiedz

8

Musisz rozpakować plik ..., aby manipulować jego zawartością. Brzydki nieco tutaj, naprawdę, to ostatnia linia, która może być uproszczone do do.call(identical, a):

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

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

+1 dla 'do.call (identyczne).'! –

+0

Świetne rozwiązanie! – user1603038