2012-12-29 43 views
9

जो मैं प्राप्त करने का प्रयास कर रहा हूं वह है कि सभी मुद्रित संख्या अधिकतम 7 अंकों पर प्रदर्शित हों। यहाँ मैं क्या चाहते हैं के उदाहरण हैं मुद्रित:मुद्रित होने वाली बड़ी संख्या में शून्य (वैज्ञानिक संकेत नहीं)

0,000000

0,299180 (वास्तविक संख्या जो .299180291884922 है ..... बनाम) (वास्तविक संख्या जो .000000000029481 है ..... बनाम)

मुझे options(scipen=99999) और options(digits=6) का उपयोग करके बाद के प्रकारों के साथ सफलता मिली है। हालांकि, पूर्व उदाहरण हमेशा शून्य की एक बड़ी संख्या प्रिंट करेगा जिसके बाद पांच गैर-शून्य अंक होंगे। मैं इसे होने से रोक सकता हूं और अपना वांछित परिणाम प्राप्त कर सकता हूं? मैं वैज्ञानिक नोटेशन नहीं चाहता हूं।

मैं चाहता हूं कि यह प्रत्येक संदर्भ में सभी मुद्रित संख्याओं पर लागू हो। उदाहरण के लिए यदि मेरे पास कुछ मैट्रिक्स हैं, तो इसे A पर कॉल करें, और मैं इस मैट्रिक्स को प्रिंट करता हूं, मैं चाहता हूं कि प्रत्येक तत्व केवल 6-7 अंक हो। मैं चाहता हूं कि यह हर संदर्भ में प्रत्येक प्रिंट के लिए स्वचालित हो; options(digits=6) और options(scipen=99999) का उपयोग करने की तरह ही यह प्रत्येक संदर्भ के लिए स्वचालित बनाता है।

+0

यदि आपके पास बड़ी संख्या है, उदाहरण के लिए 123456789.87654321। यदि आप वैज्ञानिक नोटेशन का उपयोग नहीं कर रहे हैं तो आप इसे अधिकतम 7 अंकों का उपयोग करके प्रिंट कैसे कर सकते हैं ?! – flodel

+0

@flodel अच्छा बिंदु। हो सकता है कि मैं इन बड़ी संख्याओं को वैज्ञानिक नोटेशन (या 6 अंकों से आगे बढ़ाएं) का उपयोग करना चाहूंगा। लेकिन अगर वहां केवल एक समाधान मौजूद है जो प्रत्येक डम्बर को 6-7 अंक करता है; यह ठीक है, क्योंकि मैं बड़ी संख्या में काम नहीं करता हूं जिसे मुझे आर कंसोल में प्रिंट करने की आवश्यकता है। – Jase

उत्तर

3

क्या आपकी सभी संख्या < 1 है? आप एक साधारण sprintf("%.6f", x) आज़मा सकते हैं। अन्यथा आप अंक की संख्या के आधार पर sprintf पर चीजों को लपेटने का प्रयास कर सकते हैं; अन्य विवरणों के लिए ?sprintf देखें।

+0

मैं चाहता हूं कि यह स्वचालित रूप से प्रत्येक एकल प्रिंट पर लागू हो; एक समाधान जो 'विकल्प (अंक = 6)' के समान है, जिसमें यह प्रत्येक संदर्भ में प्रत्येक ऑब्जेक्ट पर लागू होता है और मुझे केवल इसे * एक बार * सेट करने की आवश्यकता होती है। सबकुछ <1 नहीं है, लेकिन सबकुछ * जो मुझे इंटरैक्टिव रूप से मुद्रित करने की आवश्यकता है * <100 है। – Jase

10

आप जिस प्रकार के प्रिंट करना चाहते हैं उसके लिए आप एक नई प्रिंट विधि परिभाषित कर सकते हैं। उदाहरण के लिए, यदि आपके सभी नंबरों युगल हैं, तो आप

print.double=function(x){sprintf("%.6f", x)} 

बना सकते हैं अब, जब आप एक डबल (या डबल्स का एक वेक्टर) प्रिंट, समारोह print.double()print.default() के बजाय बुलाया जाएगा।

आपको प्रिंट करने के लिए आवश्यक प्रकारों के आधार पर, समान कार्य print.integer(), print.complex() आदि बनाना पड़ सकता है।

डिफ़ॉल्ट प्रिंट विधि पर वापस जाने के लिए, बस print.double() फ़ंक्शन हटाएं।