2013-08-26 7 views
6

फ़ंक्शन names ले लो: यह आर में प्राइमेटिव फ़ंक्शन है। आदिम कार्यों के लिए, एक अंतर्निहित एस 4 जेनेरिक बनाया गया है, इसलिए उस फ़ंक्शन के लिए S4 विधियां बनाना संभव है।एक प्राइमेटिव फ़ंक्शन के लिए निहित एस 4 जेनेरिक के लिए अतिरिक्त तर्क जोड़ें

एक एस 4 वर्ग परिभाषित इस प्रकार डालें:

setClass("aClass", 
     representation=list(
      values = "character", 
      id = "numeric" 
      ), 
     prototype=list(
      values = character(0), 
      id = numeric(0)), 
     validity=function(object){ 
      length([email protected])==length([email protected]) 
     } 
     ) 

अब मैं नाम, या तो हल या अवर्गीकृत को निकालने के लिए एक समारोह बनाना चाहते हैं। मैं names फ़ंक्शन का उपयोग करके ऐसा करना चाहता था ताकि नया फ़ंक्शन getNames() या जो भी कम अंतर्ज्ञानी हो, से बचें। ,

setMethod("names",signature="aClass", 
    function(x,ordered=TRUE){ 
     if(ordered) 
     [email protected][[email protected]] 
     else 
     [email protected] 
    } 

यह काम नहीं करेगा के रूप में names एक आदिम समारोह है और ordered अंतर्निहित सामान्य के लिए कोई तर्क नहीं है:

निम्नलिखित क्या किया जाना चाहिए की एक विचार देता है।

मैं कैसे निम्नलिखित परिस्थितियों में यह काम कर सकते हैं:

  • names समारोह अन्य पैकेजों से वस्तुओं सहित अन्य सभी वस्तुओं के लिए अपने मूल व्यवहार रखना चाहिए।
  • कोड पैकेज में उपयोग के लिए स्वीकार्य होना चाहिए
  • कोड को बायोकॉन्डक्टर द्वारा निर्धारित उच्च मानकों द्वारा स्वीकार्य होना चाहिए।

उत्तर

5

सामान्य रूप

> getGeneric("names") 
standardGeneric for "names" defined from package "base" 

function (x) 
standardGeneric("names", .Primitive("names")) 
<environment: 0x459c9c0> 
Methods may be defined for arguments: x 
Use showMethods("names") for currently available ones. 

उपलब्ध है तो हस्ताक्षर से आप देख सकते हैं कि संक्षिप्त उत्तर है कि आप बहस नहीं जोड़ सकते है। आप निश्चित रूप से अपना खुद का फ़ंक्शन names बनाना नहीं चाहते हैं। एक हैक एक पैकेज-ग्लोबल वैरिएबल getOption("pkg_names_ordered") का उपयोग करेगा, लेकिन मैं स्वयं उस समाधान का हिस्सा नहीं लेगा। हां, तो;

कुछ मायनों अनुबंध names द्वारा निर्धारित क्रम के बारे में कुछ नहीं कहा में (आदेश दिया नाम के लिए संख्यात्मक सूचकांक, या अव्यवस्थित नाम हैं उदाहरण के लिए, नाम और संख्यात्मक indecies अक्सर सबसेट तक उपयोग किया जाता है?) आप वैसे भी एक नया जेनेरिक प्रस्ताव कर रहे हैं।

+0

उत्तर के लिए धन्यवाद, लेकिन मैंने अपने प्रश्न में यही कहा: मैं अतिरिक्त तर्क का उपयोग नहीं कर सकता। संख्यात्मक सूचकांक आदेशित नामों और अन्य स्लॉट्स के सेट के लिए हैं (वास्तविक वस्तु बहुत जटिल है और सभी स्लॉट का आदेश नहीं दिया जा सकता है)। मैं यह इंगित करने के लिए एक अतिरिक्त स्लॉट का उपयोग करता हूं कि वस्तु का आदेश दिया गया है या नहीं। मेरे पास आदेशित नामों को "अनॉर्डर" करने के लिए एक लंबा रास्ता है। लेकिन मुझे उम्मीद है कि यह हैकिंग के बिना ऐसा करने का कोई तरीका ढूंढने की उम्मीद है। एक पैकेज-ग्लोबल वैरिएबल हैक की तरह है कि मैं एक वैध विकल्प भी नहीं मानूंगा। :) –

+2

हाँ आपके प्रश्न से ऐसा लगता है कि आपको पता था कि जवाब नहीं था, लेकिन जब से आपने सवाल पूछा, मैंने जवाब दिया;) –

+0

मुझे उम्मीद थी कि वहां कुछ रास्ता था जिसके बारे में मुझे पता नहीं था, लेकिन मुझे डर है कि मैं ' आपको "नहीं" के साथ बसना होगा :) मैं इसे कुछ और दिन देता हूं, और फिर आपके पास अपना स्वीकार्य उत्तर है। –

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