आर

2010-02-18 10 views
77

में प्रिंट आउटपुट में दशमलव अंकों की संख्या नियंत्रित करना अंकों के प्रदर्शन पर नियंत्रण प्राप्त करने के लिए आर में एक विकल्प है। उदाहरण के लिए:आर

options(digits=10) 

गणना सत्र के अंत तक 10 अंकों में गणना परिणाम देना है।

अंक: आर के मदद फ़ाइल में, अंक पैरामीटर के लिए परिभाषा इस प्रकार है अंक जब संख्यात्मक मान मुद्रण मुद्रित करने के लिए की संख्या नियंत्रित करता है। यह केवल एक सुझाव है। वैध मान 1 ... 22 डिफ़ॉल्ट के साथ कर रहे हैं

इसलिए, यह कहना है कि यह केवल एक सुझाव है। क्या होगा यदि मैं हमेशा 10 अंकों को प्रदर्शित करना पसंद करता हूं, कम या ज्यादा नहीं?

मेरा दूसरा सवाल यह है कि, यदि मैं 22 से अधिक अंकों को प्रदर्शित करना चाहता हूं, यानी 100 अंकों की तरह अधिक सटीक गणना के लिए? क्या यह बेस आर के साथ संभव है, या इसके लिए मुझे अतिरिक्त पैकेज/फ़ंक्शन चाहिए?

संपादित करें: jmoy के सुझाव के लिए धन्यवाद, मैं sprintf("%.100f",pi) की कोशिश की और यह

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000" 

जो 48 दशमलव है दे दी है। क्या यह अधिकतम सीमा आर संभाल सकता है? दरअसल पीआई में दशमलव की असीमित संख्या होती है।

+4

केवल पीआई के पहले 15 अंक सटीक हैं। वास्तविक मूल्य की तुलना करें http://joyofpi.com/pi.html –

+1

आप सही हैं। आर में यह अलग क्यों है? –

+3

आर http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f –

उत्तर

38

कारण यह केवल एक सुझाव है कि आप आसानी से एक प्रिंट फ़ंक्शन लिख सकते हैं जो विकल्पों के मूल्य को अनदेखा करता है। अंतर्निहित मुद्रण और स्वरूपण फ़ंक्शन options मान को डिफ़ॉल्ट के रूप में उपयोग करते हैं।

दूसरे प्रश्न के रूप में, चूंकि आर परिमित परिशुद्धता अंकगणित का उपयोग करता है, इसलिए आपके उत्तर 15 या 16 दशमलव स्थानों से अधिक सटीक नहीं हैं, इसलिए सामान्य रूप से, अधिक आवश्यक नहीं हैं। gmp और rcdd पैकेज कई सटीक अंकगणित (जीएमपी लाइब्रेरी के लिए एक इंटरैस के माध्यम से) के साथ सौदा करते हैं, लेकिन यह ज्यादातर आपके युगल के लिए अधिक दशमलव स्थानों की बजाय बड़े पूर्णांक से संबंधित है।

Mathematica या Maple आपको अपने दिल की इच्छाओं के रूप में कई दशमलव स्थान देने की अनुमति देगा।

संपादित करें:
दशमलव स्थानों और महत्वपूर्ण आंकड़ों के बीच अंतर के बारे में सोचने के लिए उपयोगी हो सकता है। यदि आप सांख्यिकीय परीक्षण कर रहे हैं जो 15 वें महत्वपूर्ण आंकड़े से परे मतभेदों पर भरोसा करते हैं, तो आपका विश्लेषण लगभग निश्चित रूप से जंक है।

दूसरी तरफ, यदि आप बहुत छोटी संख्या से निपट रहे हैं, तो यह एक समस्या से कम है, क्योंकि आर .Machine$double.xmin (आमतौर पर 2e-308) जितना छोटा हो सकता है।

इन दो विश्लेषणों की तुलना करें।

x1 <- rnorm(50, 1, 1e-15) 
y1 <- rnorm(50, 1 + 1e-15, 1e-15) 
t.test(x1, y1) #Should throw an error 

x2 <- rnorm(50, 0, 1e-15) 
y2 <- rnorm(50, 1e-15, 1e-15) 
t.test(x2, y2) #ok 

पहले मामले में, संख्याओं के बीच अंतर केवल कई महत्वपूर्ण आंकड़ों के बाद होता है, इसलिए डेटा "लगभग स्थिर" होता है। दूसरे मामले में, हालांकि संख्याओं के बीच मतभेदों का आकार समान है, संख्याओं की परिमाण की तुलना में वे स्वयं बड़े हैं।


e3bo से उल्लेख किया है, आप एक से अधिक परिशुद्धता चल Rmpfr पैकेज का उपयोग बिन्दु संख्या का उपयोग कर सकते हैं।

mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825") 

ये धीमी और अधिक स्मृति नियमित (डबल परिशुद्धता) की तुलना में numeric वैक्टर का उपयोग करने के गहन हैं, लेकिन आप एक खराब वातानुकूलित समस्या या अस्थिर एल्गोरिथ्म अगर उपयोगी हो सकता है।

+3

[इस Rwiki पृष्ठ] के रूप में (http://rwiki.sciviews.org/doku.php?id=misc:r_accuracy:high_precision_arithmetic) दर्शाता है, [आरएमपीएफ पैकेज] (http: //cran.at.r-project। संगठन/वेब/पैकेज/आरएमपीआरएफ/index.html) आर – e3bo

+0

में उच्च परिशुद्धता फ्लोटिंग पॉइंट अंकगणित के लिए अनुमति देता है लेकिन क्या इसकी परिशुद्धता में सुधार के लिए आरएमपीआर किसी भी आर पैकेज द्वारा उपयोग किया जा सकता है? या यह केवल आंतरिक रूप से कोडित कार्यों का उपयोग कर सकते हैं? – skan

+2

मैं बस यही सोच रहा था, "यदि आप सांख्यिकीय परीक्षण कर रहे हैं जो 15 वें महत्वपूर्ण आंकड़े से परे मतभेदों पर भरोसा करते हैं, तो आपका विश्लेषण लगभग निश्चित रूप से जंक है।" लेकिन मुझे आश्चर्य हुआ कि अंकों की संख्या क्या होगी, जिस पर मैं इसे जंक कर दूंगा, और मैंने 5 सोचा, लेकिन मुझे सही खड़े होने में खुशी होगी। – PatrickT

29

आप पूरी उत्पादन अपने आप को पैदा कर रहे हैं, तो आप sprintf

> sprintf("%.10f",0.25) 
[1] "0.2500000000" 

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

यदि आप आर की सामान्य संख्या प्रिंट कर रहे हैं तो 100 अंकों को प्रदर्शित करना समझ में नहीं आता है, क्योंकि 64-बिट युगल का उपयोग करने के लिए आप सबसे अच्छी सटीकता प्राप्त कर सकते हैं, लगभग 16 दशमलव अंक (देखें। अपने सिस्टम पर मैचिन $ double.eps)। शेष अंक सिर्फ जंक होंगे।

+0

असल में, कुछ विशेष ची-स्क्वायर परीक्षणों को लागू करने के लिए सटीक परिणाम देने के लिए सैकड़ों दशमलव की आवश्यकता थी। इसके अलावा पीआई में हजारों दशमलव हैं। यही कारण है कि मैं 100 या अधिक अंकों के बारे में सोच रहा था। –

+12

पीआई में दशमलव की असीमित संख्या है; इसका मतलब यह नहीं है कि एक कंप्यूटर उन्हें स्टोर कर सकता है। – Shane

+0

मुझे लगता है कि यह एक परिदृश्य है जहां गणित आर – skan