2015-12-10 8 views
5

मान लें कि मेरे पास testClass नामक एक एस 4 कक्षा है। सामग्री इस प्रश्न का उद्देश्य अप्रासंगिक है लेकिन चलिए इसे एक संख्यात्मक मान बनाते हैं।ऑब्जेक्ट के विपरीत लेने के लिए एस 4 विधि को कैसे परिभाषित किया जाए?

#' An S4 class that stores a list. 
#' @export 
setClass("testClass", 
       representation(a="numeric")) 

मैं किसी विधि को परिभाषित करना चाहता हूं जो किसी ऑब्जेक्ट के विपरीत लेने जैसा काम करता है। उदाहरण के लिए:

vec <- rnorm(10) 
-vec 

मुझे लगा कि यह पहला तर्क लापता के साथ एक Arith विधि की घोषणा की जाएगी।

#' @export 
setMethod("Arith", c(e1="missing", e2="testClass"), 
        function(e1, e2) 
        { 
         op = .Generic[[1]] 
         switch(op, 
          `-` = return([email protected]) 
         ) 
        } 
) 

हालांकि, जब मैं विधि मैं निम्नलिखित त्रुटि मिलती है लागू करने का प्रयास:

tc <- new("testClass", a=2) 
-tc 

Error in -tc : invalid argument to unary operator

उत्तर

6

हा! इसके साथ कुछ और झुकाव के बाद मुझे पता चला कि यह e2 तर्क है जिसे गायब होने की आवश्यकता है। निम्नलिखित कार्य:

#' @export 
setMethod("Arith", c(e1="testClass", e2="missing"), 
        function(e1, e2) 
        { 
         op = .Generic[[1]] 
         switch(op, 
          `-` = return([email protected]) 
         ) 
        } 
) 
+0

अच्छा डेमो। जिज्ञासा से बाहर, वह '.Generic' कहां से आता है (यानी इसका मूल्य कहां पाया जा सकता है)? –

+0

'? जेनररिक 'कुछ स्क्रॉलिंग के बाद उत्पन्न होता है:' 'जेनरिक' जेनेरिक फ़ंक्शन नामकरण एक लम्बाई वाला एक वर्ण वेक्टर है। – thothal

+0

यदि आप 'setMethod (" - ", c (e1 =" testClass' ", ई 2 =" गायब "), फ़ंक्शन (ई 1, ई 2) -ई 1 @ ए)'? – nicola

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