2013-04-08 5 views
5

1 पंक्ति में 2 आयामी मैट्रिक्स को कम करने के लिए आर में डिफ़ॉल्ट व्यवहार वास्तव में एक आयाम ड्रॉप करना है। यह मैट्रिक्स खोज के अंत में ड्रॉप = FALSE डालकर "निश्चित" हो सकता है। क्या यह डिफ़ॉल्ट बनाने का कोई तरीका है? मेरे पास एक बहुत लंबा कार्यक्रम है और मुझे एहसास हुआ है कि अगर मुझे नहीं है तो मुझे इसे लगभग 100 स्थानों में जोड़ना होगा ... मैंने खोज की? विकल्प,? '[', और? मैट्रिक्स का कोई फायदा नहीं हुआ।ड्रॉप = गलत या डिफ़ॉल्ट व्यवहार बदलने के विकल्प

+0

प्रतिस्थापन करने के लिए कोड पर एक पर्ल या खोल स्क्रिप्ट लिखें। ठीक है, परिभाषित करना आसान नहीं हो सकता है लेकिन शॉट के लायक है। – igelkott

+2

मेरा मानना ​​है कि हैक (ओवर-राइडिंग '[', आदि) हैं, लेकिन आम तौर पर मुझे लगता है कि वैश्विक स्तर पर उस व्यवहार को बदलने का कोई तरीका नहीं है। सबसे अच्छा विकल्प आपके कोड को अपडेट करना बहुत अच्छा हो सकता है। – joran

+0

जो भी पहले पूछे गए प्रश्न से जुड़ा हुआ है, धन्यवाद, यह सही है। – hedgedandlevered

उत्तर

5

आप `[` इस तरह फिर से परिभाषित कर सकते हैं:

old <- `[` 
`[` <- function(...) { old(..., drop=FALSE) } 

इस संशोधन इंटरैक्टिव गुंजाइश के लिए स्थानीय होना चाहिए और इसलिए दिनचर्या जो अन्य व्यवहार पर भरोसा करते हैं पर कोई असर नहीं। हालांकि, कोई गारंटी नहीं है। और तैयार रहें कि इस फॉर्म का कोड आपके कोड के पाठकों को भ्रमित करने की संभावना होगी, जो अन्य अर्थशास्त्र में उपयोग किए जाते हैं।

शायद आप अपने सभी कोड के बजाय यह परिवर्तन किसी विशिष्ट फ़ंक्शन में स्थानीय कर सकते हैं?

एक विकल्प मैट्रिक्स ऑब्जेक्ट्स के लिए अपनी कक्षा लिख ​​रहा होगा, जिसके लिए आप अपना स्वयं का सबसेट ऑपरेटर कार्यान्वयन प्रदान कर सकते हैं। यह समझ में आता है कि यदि आप बहुत सीमित स्थानों में मैट्रिक्स बनाते हैं, लेकिन इन मैट्रिक्स का निर्माण करने वाले बड़ी संख्या में कोड पथ होने पर समस्या हो सकती है।

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