आर

2011-08-05 6 views
9

में प्रोग्रामेटिक रूप से एस 3 और एस 4 ऑब्जेक्ट्स को अलग करना यदि 0 ऑब्जेक्ट x ऑब्जेक्ट दिया गया है, तो क्या यह वर्गीकृत करने का कोई तरीका है कि यह S3 या S4 (या "अन्य") है? मैंने is.object() और isS4() पर देखा है, और यह पहचान सकता है कि कुछ वस्तु (या नहीं) है और यह एक एस 4 ऑब्जेक्ट (या नहीं) है। हालांकि, मुझे ऐसा प्रतीत नहीं होता है कि एस 3 ऑब्जेक्ट्स उन ऑब्जेक्ट्स के पूरक हैं जो एस 4 ऑब्जेक्ट्स नहीं हैं।आर

इसलिए, ये असाइनमेंट प्रोग्रामेटिक तरीके से कैसे किए जा सकते हैं?

a = as.factor(1:3) 
is.object(a) # TRUE 
isS4(a) # FALSE 

कि मतलब यह है कि a एक S3 वस्तु है:

यहाँ कुछ का एक उदाहरण है कि कीड़े मुझे, is.object() के लिए मदद से ली गई है?

उत्तर

10

यदि यह एक वस्तु है और एक एस 4 नहीं है तो यह एक S3 है: कुछ जादू वस्तु बिट सेट हो जाता है कि जब बात एक वर्ग विशेषता है के लिए

is.object(foo) & !isS4(foo) 

is.object चेक, इसलिए इसकी अनिवार्य रूप से एक तेज any(names(attributes(foo))=="class") करने का तरीका, जो एक एस 3 ऑब्जेक्ट को परिभाषित करता है।

+0

वैसे यह बहुत अधिक जवाब देता है। :) – Iterator

+0

अब मुझे लगता है कि ''एसएस 3' होना चाहिए जो आप 'किसी भी ...' के साथ सुझाव देते हैं। जैसा कि है, लॉजिकल ऑपरेशन '(ए और! बी)' पर एक असाइनमेंट के आधार पर 'सी' की अनुमति नहीं है जो 'ए' और' बी '(जैसे कुछ भविष्य "एस 5" के साथ युग्मित रूप से पारस्परिक रूप से अनन्य है। कक्षा जो न तो एस 3 और न ही एस 4 है)। अभी के लिए, यह काम करता है, लेकिन मुझे लगता है कि मैं एक वाई 2 के प्रकार की बग की ओर चल रहा हूं। :( – Iterator

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

  • कोई संबंधित समस्या नहीं^_^