2017-12-14 110 views
5

मान लीजिए मेरे पास एक ऐसा फ़ंक्शन है जो कुछ तर्क k लेता है और एक अन्य फ़ंक्शन लौटाता है जो n तर्क लेता है लेकिन k अपने फ़ंक्शन बॉडी में उपयोग करता है।पार्स किए गए चर के साथ फ़ंक्शन बॉडी को प्रिंट करने के लिए कैसे करें

makeFn <- function(k) { 
    function(n){ 
    rep(k,n) 
    } 
} 

five <- makeFn(5) 

five(3) 
# [1] 5 5 5 

body(five) 
# { 
# rep(k, n) 
# } 

मैं कैसे मुद्रित कर सकते हैं five के शरीर इतना है कि यह rep(5,n) बजाय rep(k,n) पता चलता है?

+0

आपको किसी समाधान की कितनी लचीला आवश्यकता है? क्या नेस्टेड कार्यों के अधिक स्तर हो सकते हैं? इस साधारण मामले के लिए, आप अपने विकल्प "एनवी" तर्क के साथ 'विकल्प' का उपयोग कर सकते हैं। SInce 'विकल्प 'अपने पहले तर्क का मूल्यांकन नहीं करेगा, हमें' eval (कॉल (" विकल्प ", शरीर (पांच), पर्यावरण (पांच)) जैसे कॉल बनाने की आवश्यकता है)' ' –

उत्तर

0

एक विकल्प eval और bquote को गठबंधन करना है।

makeFn <- function(k) { 
    eval(bquote(function(n) rep(.(k),n))) 
} 

five <- makeFn(5) 
body(five) 
# rep(5, n) 

.() अंकन जो कुछ भी कोष्ठक में है मूल्यांकन करने के लिए bquote कह रहा है, तो अभिव्यक्ति में परिणाम शामिल हैं।

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