2013-05-01 44 views
7

Tôi đang tìm cách phổ biến để thay đổi giá trị của đối số bên trong dấu ba chấm và chuyển nó sang giá trị khác chức năng. Tôi biết một giải pháp xấu xí cho điều đó, trông giống như sau:R: Thay đổi giá trị của đối số trong dấu ba chấm và chuyển dấu ba chấm sang hàm khác mà không sử dụng danh sách() và eval()

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

test(x=1,y=1) 

Lý tưởng nhất là tôi muốn tránh chuyển đổi ... sang danh sách và sau đó sử dụng eval(). Có thể nào đó bằng cách nào đó đề cập đến một đối số bên trong ... bằng tên và thay đổi giá trị của nó?

Trả lời

8

Bạn phải giải nén ... để thao tác nội dung của nó. Các bit xấu xí ở đây, thực sự, là dòng cuối cùng của bạn, có thể được đơn giản hóa thành do.call(identical, a):

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

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

+1 cho 'do.call (giống hệt,.)'! –

+0

Giải pháp tuyệt vời! – user1603038

Các vấn đề liên quan