2013-03-26 8 views
5

मैटलैब में यदि मेरे पास हस्ताक्षर है जैसे कि हस्ताक्षर एफ (ए, बी, सी) है, तो मैं एक फ़ंक्शन कर सकता हूं जिसमें केवल एक चर बी है, जो एक निश्चित ए = ए 1 और सी = सी 1 के साथ एफ को कॉल करेगा :आर में Matlab में @ फ़ंक्शन हैंडल के बराबर क्या है?

g = @(b) f(a1, b, c1); 

क्या आर में समकक्ष है, या क्या मुझे बस एक नया फ़ंक्शन फिर से परिभाषित करने की आवश्यकता है?

उत्तर

7

वहाँ भी सुविधाजनक functional::Curry कार्यात्मक है:

f <- function(a, b, c) {a + b + c} 
f(1, 2, 3) 
# [1] 6 

library(functional) 
g <- Curry(f, a = a1, c = c1) 
g(b=2) 
# [1] 6 
g(2) 
# [1] 6 

मुझे लगता है कि @ एनपीई समाधान के साथ एक महत्वपूर्ण अंतर यह है कि gCurry का उपयोग कर की परिभाषा b का उल्लेख नहीं करता है। इसलिए आप इस दृष्टिकोण को प्राथमिकता दे सकते हैं जब f में तर्कों की संख्या बड़ी हो जाती है।

+1

'pryr :: आंशिक' और 'ptools','% <<%', '%>>% 'और'%()% 'में भी है। यह स्पष्ट नहीं है कि तर्कों का आंशिक मूल्यांकन और आलसी मूल्यांकन किस प्रकार इंटरैक्ट करना चाहिए, और प्रत्येक पैकेज थोड़ा अलग दृष्टिकोण लेता है। – hadley

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