2011-09-07 16 views
11

मैंने कुछ अनुकूलन एल्गोरिदम लागू करने का प्रयास करते समय आर संदर्भ कक्षाओं में कुछ अजीब व्यवहार देखा है। कुछ विशेष रूप से विधियों को शुरू करने में शामिल जादू के पीछे कुछ दृश्य दिखते हैं जो अज्ञात कार्यों के साथ काम करना मुश्किल बनाता है। यहां एक उदाहरण दिया गया है जो कठिनाई को दिखाता है: मैं एक फ़ंक्शन को ऑप्टिमाइज़ करने के लिए परिभाषित करता हूं (f_opt), एक फ़ंक्शन जो उस पर ऑप्टिमाइज़ करता है, और एक संदर्भ क्लास जिसमें इन दोनों विधियों के रूप में हैं। अजीब व्यवहार कोडआर संदर्भ कक्षाओं में विधि प्रारंभिकरण

f_opt <- function(x) (t(x)%*%x) 

do_optim_opt <- function(x) optim(x,f) 
do_optim2_opt <- function(x) 
    { 
    f(x) #Pointless extra evaluation 
    optim(x,f) 
    } 

optClass <- setRefClass("optClass",methods=list(do_optim=do_optim_opt, 
           do_optim2=do_optim2_opt, 
           f=f_opt)) 
oc <- optClass$new() 
oc$do_optim(rep(0,2)) #Doesn't work: Error in function (par) : object 'f' not found 
oc$do_optim2(rep(0,2)) #Works. 
oc$do_optim(rep(0,2)) #Parsing magic has presumably happened, and now this works too. 

में स्पष्ट हो जाएगा यह सिर्फ मुझे है, या यह भी अन्य लोगों के लिए एक बग कैसा दिखता है?

आर-devel में
+1

क्या आपने मदद ("बल") देखा है? –

+0

मैं एलन ई से सहमत हूं। यह आलसी आलसी (गैर-) मूल्यांकन के क्लासिक उदाहरण की तरह दिखता है। –

उत्तर

6

This पद प्रासंगिक लगता है, वैकल्पिक हल के साथ

do_optim_opt <- function(x, f) optim(x, .self$f) 

आर-devel के लिए एक पोस्ट के लायक लगता है।

+0

यह तय किया गया। आपका बहुत बहुत धन्यवाद! – sbarthelme

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