बस इस मुद्दे में लाभ और सीमा दिखाने के लिए एक उदाहरण प्रदान करना चाहते हैं:
I अपने नाम के साथ एक समारोह "सेव" करने के लिए एक विकल्प है कि एक और समारोह में इस्तेमाल किया जाएगा के रूप में चाहते हैं:
R> foreach(..., .combine=test_fun) {...}
test_fun
समारोह का नाम है, और निश्चित रूप से
R> mode(test_fun)
[1] "function"
जब मैं इसे foreach में उपयोग करें, मुझे केवल फ़ंक्शन नाम की आवश्यकता है, जबकि test_fun
एक मौजूदा फ़ंक्शन हो सकता है (उदाहरण के लिए cbind
)। तो, test_fun
R> test_fun <- get('cbind')
या
R> test_fun <- assign('cbind', get('cbind'))
द्वारा असाइन किया गया है तो, आप समारोह यहां
R> test_fun
function (..., deparse.level = 1)
.Internal(cbind(deparse.level, ...))
वास्तव में मिला है, मूल नाम, नहीं रखा जा सकता है ताकि आप कोई है test_fun
को स्ट्रिंग "cbind"
पर कनवर्ट करने का तरीका।
R> deparse(substitute(test_fun))
[1] "test_fun"
दुर्भाग्यवश मुझे फ़ोरैच कोड को छोड़ने की आवश्यकता है ताकि स्ट्रिंग में मूल नाम दिखाना पड़े। इसका मतलब है कि एकमात्र तरीका 'cbind'
को एक स्ट्रिंग के रूप में सहेजना और ऐसी फ़ंक्शन ऑब्जेक्ट बनाना इस मामले में कोई लाभ नहीं लाता है।
हा - मुझे डर था कि मुझे वह भाग्य मिलेगा। मैं बस एक ऐसा फ़ंक्शन प्राप्त करने में सक्षम होना चाहता था जिसे मैं compar.distribution.methods (c (two.choice, go.left, simple.random.sample) पर कॉल कर सकता हूं, और वेक्टर में प्रत्येक विधि के लिए परिणामों की एक तालिका प्राप्त कर सकता हूं। अच्छा-से-पास लेबल के वेक्टर में मेरे नामों के साथ पास नहीं होना पड़ेगा, लेकिन यह निश्चित रूप से एक और विकल्प है। मैं बस ऐसा कुछ करने की उम्मीद कर रहा था जो मेरे लिए करे। अगर यह आर का हिस्सा नहीं है प्रवाह, तो बेहतर है कि इस प्रश्न का उत्तर दिया गया है। – HamiltonUlmer
एस 3 विधि प्रेषण आपके लिए करता है! "ओओ" से डरो मत, यह इसका उपयोग शुरू करने के लिए एक अच्छा आसान उदाहरण होगा। अगर केवल मेरे पास कुछ प्रकार था और सौम्य दस्तावेज़ आपको इंगित करने के लिए ... शायद पिछले साल से "डेटा विश्लेषण के लिए सॉफ्टवेयर" पुस्तकें? –