2011-12-19 18 views

उत्तर

5

ठीक है, एक फोन नहीं करता है औपचारिक, केवल वास्तविक बहस ... अंतर किया जा रहा foo <- function(x, y, ..., z=42) की तरह एक समारोह वास्तविक तर्क foo(42, bar=13) की तरह साथ कहा जा सकता है कि नहीं है।

... लेकिन बहस इस तरह से किया जा सकता हो रही:

a <- call('foo', a=42, 13) 
as.list(a)[-1] 
#$a 
#[1] 42 
# 
#[[2]] 
#[1] 13 

... दूसरी ओर, आप आमतौर पर (हमेशा नहीं) वास्तविक समारोह खोजने के लिए और इसके लिए औपचारिक पा सकते हैं:

a <- quote(which(letters=='g')) 
formals(match.fun(a[[1]])) 
#$x 
# 
#$arr.ind 
#[1] FALSE 
# 
#$useNames 
#[1] TRUE 

यहाँ अगर समारोह (ऊपर foo करने के लिए कॉल के साथ) नहीं पाया जा सकता है आप से निपटने के कुछ त्रुटि जोड़ने की जरूरत होगी ...

+2

आप करने के लिए कॉल मजबूर करने की जरूरत नहीं है एक सूची - आप बस डब्ल्यू कर सकते हैं एक सूची के रूप में इसके साथ ओर्क, जब तक आपको याद है कि पहला तत्व कार्य है। इसके अलावा आप शायद 'match.fun' के बजाय' match.call' चाहते हैं - इस तरह आप डिफ़ॉल्ट और आपूर्ति किए गए तर्कों को जोड़ सकते हैं। – hadley

+0

वैसे आप '' बजाय match.fun' की match.call' नहीं करना चाहेंगे, लेकिन यह एक उपयोगी इसके अतिरिक्त है: 'match.call (eval (एक [[1]]), एक)' – hadley

+0

@hadley - उल्लेख के लिए धन्यवाद 'match.call'। एक सूची में मजबूर नहीं हो सकता है अगर आप जानते हैं कि आप क्या कर रहे हैं - लेकिन 'एक [-1]' बहुत अजीब प्रिंट करेगा, और उदाहरण के लिए 'do.call' पर तर्क के रूप में पारित नहीं किया जा सकता है ... – Tommy

संबंधित मुद्दे