2015-01-30 7 views
5

मैं डेवलपर नहीं हूं, और मैं सरल शब्दों में जो कुछ भी चाहता हूं उसे व्यक्त नहीं कर सकता। यह वातावरण, स्कोपिंग, संलग्नक, और शायद पॉइंटर्स और संदर्भ जैसी चीजों से जुड़ा हुआ है।आर फ़ंक्शन वैरिएबल जो फ़ंक्शन रिटर्न के बराबर है। प्रत्येक बार इसे फिर से मूल्यांकन करें

यह कोड के साथ स्पष्ट किया जाना चाहिए:

a<-c(1,2) 
b<-length(a) 
a<-c(1,2,3) 
b 
[1] 2 

मैं चाहता हूँ ख 3.

मैं दूसरी पंक्ति में क्या बदल सकता हूँ वापस जाने के लिए? क्या नए कस्टम फ़ंक्शंस को परिभाषित किए बिना और बाहरी पैकेजों का उपयोग किए बिना ऐसा करना संभव है?

eval, आवंटित की कोशिश कर रहा में विफल रहा, < < - अब तक

उत्तर

6

मैं सिफारिश कर रहा हूँ नहीं कि आप वास्तव में इसका इस्तेमाल करना चाहिए, लेकिन makeActiveBinding() आप जो चाह रहे हैं क्या करेंगे:

makeActiveBinding("b", function() length(a), .GlobalEnv) 
a <- c(1,2) 
b 
# [1] 2 
a <- c(1,2,4) 
b 
# [1] 3 
+0

कमाल। जानकारी का सबसे अच्छा स्रोत (उदा। पुस्तक) कहां है जहां मैं इसके बारे में और अधिक पढ़ सकता हूं (स्पष्ट रूप से केवल बाउंडिंग के लिए छोड़कर)। क्या अन्य प्रोग्रामिंग भाषाओं या संबंधित विषयों में बाध्यकारी का कोई "समानार्थी" है? मैं शैल स्क्रिप्ट में समान कुछ भी उपयोग करना चाहूंगा - क्या इसे बाश में बाध्यकारी भी कहा जाता है? – stuckNlazy

+0

हम्म। निश्चित नहीं। हालांकि, बुनियादी विचार यह है कि दृश्यों के पीछे, 'बी' टाइप करने से कार्यकाल की लंबाई (ए) 'हर बार मूल्यांकन होती है। निजी तौर पर, मैं 'ए' की लंबाई प्राप्त करने के लिए बस एक सरल कार्य 'बी <- फ़ंक्शन() लम्बाई (ए)' और फिर 'बी() '(' बी' के बजाय) को परिभाषित करने में अधिक आरामदायक होगा। इस तरह से आप जो भी गड़बड़ जादू वास्तव में दृश्यों के पीछे चल रहे हैं, वहां से क्या है? 'एक्टिव बाइंडिंग' का वर्णन "एक प्रयोगात्मक इंटरफ़ेस" के रूप में किया गया है। अतिरिक्त '()' टाइप करके, आप सरल फ़ंक्शन परिभाषाओं और फ़ंक्शन कॉल की अधिक मुख्यधारा की दुनिया में रह सकते हैं। –

+0

@ जोशो'ब्रायन - मैं टिप्पणियों में इसे छोड़ने के बजाय उत्तर में जोड़ दूंगा। जो कुछ भी आपने कहा वह मेरे लिए बहुत बुद्धिमान लगता है। – thelatemail

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