2010-12-05 3 views
93

यहां मेरा आर कोड है। कार्यों परिभाषित कर रहे हैं के रूप में:पहले ही मूल्यांकन के तहत वादा: रिकर्सिव डिफ़ॉल्ट तर्क संदर्भ या पूर्व समस्याएं?

f <- function(x, T) { 
    10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.001 * x^3 + 0.2 * x + 80 
} 

g <- function(x, T, f=f) { 
    exp(-f(x)/T) 
} 

test <- function(g=g, T=1) { 
    g(1, T) 
} 

चल त्रुटि है:

> परीक्षण() की परीक्षा में
त्रुटि(): पहले से ही मूल्यांकन के तहत
वादा: पुनरावर्ती डिफ़ॉल्ट तर्क संदर्भ या इससे पहले की परेशानियाँ ?

यदि मैं f की g की परिभाषा को प्रतिस्थापित करता हूं, तो त्रुटि दूर हो जाती है।

मैं सोच रहा था कि त्रुटि क्या थी? की परिभाषा को g में परिभाषित न करें, तो इसे कैसे ठीक करें? धन्यवाद!


अद्यतन:

धन्यवाद! दो प्रश्न:

(1) यदि test फ़ंक्शन f के लिए तर्क लेता है, तो क्या आप test <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) } जैसे कुछ जोड़ देंगे? अधिक रिकर्सन के मामले में, क्या यह एक अच्छा और सुरक्षित अभ्यास है जोड़ना।?

(2) यदि f उदाहरण g <- function(x, T, f=f){ exp(-f*x/T) } के लिए, एक गैर समारोह तर्क है और test <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) }, एक अच्छा और सुरक्षित अभ्यास दोनों औपचारिक और वास्तविक गैर कार्यात्मक तर्क के लिए एक ही नाम का उपयोग करेंगे या यह कुछ संभावित परेशानी का कारण हो सकता?

उत्तर

101

फॉर्म x=x के औपचारिक तर्क इस कारण हैं। उन दो उदाहरणों को खत्म करना जहां वे होते हैं:

f <- function(x, T) { 
    10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.001 * x^3 + 0.2 * x + 80 
} 

g <- function(x, T, f. = f) { ## 1. note f. 
    exp(-f.(x)/T) 
} 

test<- function(g. = g, T = 1) { ## 2. note g. 
    g.(1,T) 
} 

test() 
## [1] 8.560335e-37 
+1

धन्यवाद! दो प्रश्न (1) यदि फ़ंक्शन * परीक्षण * आगे * f * के लिए तर्क लेता है, तो आप * test <- function (g। = G, T = 1, f .. = f) {g। (1) जैसे कुछ जोड़ देंगे , टी, एफ। = एफ ..)} *? अधिक रिकर्सन के मामलों में, क्या यह एक अच्छा और सुरक्षित अभ्यास है * * * जोड़ रहा है? (2) यदि * एफ * एक गैर-कार्य तर्क है, उदाहरण के लिए * जी <- फ़ंक्शन (एक्स, टी, एफ = एफ) {एक्सपी (-एफ * एक्स/टी)} * और * परीक्षण <- फ़ंक्शन (जी । = जी, टी = 1, एफ = एफ) {जी। (1, टी, एफ = एफ।)} *, औपचारिक और वास्तविक गैर-कार्यात्मक तर्क दोनों के लिए एक ही नाम का उपयोग एक अच्छा और सुरक्षित अभ्यास या हो सकता है कुछ संभावित परेशानी का कारण बनता है? – Tim

+10

कोई अन्य समाधान? मैं कुछ तर्कों को कार्यों की श्रृंखला (लगभग 5 स्तर) से काफी गहरा कर रहा हूं, और यह समाधान '..... बोझिल 'बन सकता है। :) –

+0

क्या होगा यदि मैं किसी तर्क का नाम नहीं बदल सकता, उदाहरण के लिए, जब प्रश्न में कार्य 'सिस्टम' जैसा सिस्टम फ़ंक्शन है? – sds

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