2015-05-08 12 views
5

में अपना नाम और तर्क कैसे लौटा सकता है क्या किसी फ़ंक्शन के नाम और तर्क प्राप्त करने का कोई तरीका है। उदाहरण के लिए: निम्नलिखित भी सहायक हो सकता है,एक फ़ंक्शन R

> MYFN = function(name='test', num = 5, abool=T){ 
+ getMyHeader() 
+ } 
> 
> MYFN() 
[1] "MYFN = function(name='test', num = 5, abool=T)" 

या:

> MYFN = function(name='test', num = 5, abool=T){ 
+ return ("MYFN = function(name='test', num = 5, abool=T)") 
+ } 
> 
> MYFN() 
[1] "MYFN = function(name='test', num = 5, abool=T)" 

मैं एक fn getMyHeader() कहा जाता है जो नाम और समारोह के तर्कों जिसमें से यह कहा जाता है लौट जाना चाहते हैं :

getMyHeader(MYFN) 
[1] "MYFN = function(name='test', num = 5, abool=T)" 
+0

मुझे लगता है कि आप ('sys.call के संयोजन से एक साथ अपने वांछित परिणाम टुकड़ा कर सकते हैं)' और 'sys

आप किसी भी समारोह के साथ इस का उपयोग कर सकते .क्शन() ', लेकिन मुझे यकीन है कि ऐसा करने के लिए एक क्लीनर तरीका है। – nrussell

+0

'match.call' आप जो चाहते हैं उसके करीब लगता है लेकिन काफी नहीं है। इसे अपने इच्छित रूप में प्राप्त करने के लिए इसे कुछ जोड़ना होगा। – Dason

+1

मैं 'match.call', या अधिक विशेष रूप से' deparse (match.call()) 'का सुझाव देने जा रहा था, लेकिन यह आपको डिफ़ॉल्ट तर्क नहीं देता है। – Roland

उत्तर

4

कुंजी आर्ग के उपयोग (क्योंकि हम समारोह हम में रुचि रखते हैं बाहर से इसे कहते आसान) तर्क पाने के लिए है, और विकल्प (एक्स) तर्क के नाम पर खींचने के लिए (यानीसमारोह का नाम)। यह आसान है अगर आप इसे फ़ंक्शन के बाहर ही करते हैं।

यदि आप इसे फ़ंक्शन नाम पास करते हैं, तो आप इसे बनाने के लिए कोई फ़ंक्शन या विधि बना सकते हैं।

यहाँ एक उदाहरण एक सामान्य बुलाया 'शीर्षक के और एक विधि है कि जब हैडर एक समारोह में दिया जाता है प्रयोग किया जाता है बनाने है (इस गैर कार्यों पर आकस्मिक निष्पादन रोकता है):

header<-function(x){ 
UseMethod('header',x) 
} 

header.function <-function(x){ 
    y<-list(args(x)) 
    x<-as.character(substitute(x)) 
    print(sprintf('%s=%s',x,y)) 
} 

परीक्षण करने के लिए:

myfn<- function(name='name',num=6,abol='abol'){ 
    return(name,num,abol) 
    } 
header(myfn) 

रिटर्न:

[1] "myfn=function (name = \"name\", num = 6, abol = \"abol\") \nNULL" 

नोट बच गए उद्धरण (इस pri के लिए अच्छा है nting)। ऊपर से, मैं इसे नीचे पट्टी करना भूल जाता हूं, लेकिन यह बहुत मुश्किल नहीं होना चाहिए।

header(glm) 

रिटर्न:

[1] "glm=function (formula, family = gaussian, data, weights, subset, na.action, start = NULL, etastart, mustart, offset, control = list(...), model = TRUE, method = \"glm.fit\", x = FALSE, y = TRUE, contrasts = NULL, ...) \nNULL" 
+0

यह वही है जो मैं चाहता था। धन्यवाद। – rnso