2013-05-01 11 views
7

के बिना अन्य फ़ंक्शन में ellipsis में एक तर्क का मान बदलें और ellipsis को पास करें Illipsis के अंदर तर्क के मान को बदलने के लिए एक सार्वभौमिक तरीका ढूंढ रहा है और इसे दूसरे को पास कर रहा हूं समारोह। मुझे लगता है कि के लिए एक बदसूरत समाधान है, जो इस तरह दिखता है पता:आर: सूची() और 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

आपको इसकी सामग्री में हेरफेर करने के लिए ... अनपैक करना होगा। (समान।)

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

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

+1 'do.call के लिए': यहाँ बदसूरत सा, वास्तव में, अपने अंतिम पंक्ति है, जो do.call(identical, a) को सरल किया जा सकता है! –

+0

ग्रेट सॉल्यूशन! – user1603038