बल आर घातीय संकेतन (जैसे e + 10) का उपयोग नहीं करना है?


228

क्या मैं आर e+10-जैसे नोटेशन का उपयोग करने के बजाय नियमित संख्याओं का उपयोग करने के लिए मजबूर कर सकता हूं ? मेरे पास है:

1.810032e+09
# and 
4

एक ही वेक्टर के भीतर और देखना चाहते हैं:

1810032000
# and
4

मैं एक पुराने जमाने के प्रोग्राम के लिए आउटपुट तैयार कर रहा हूं और मुझे एक टेक्स्ट फाइल का उपयोग करके लिखना है cat। यह अब तक ठीक काम करता है, लेकिन मैं बस e+10वहाँ संकेतन का उपयोग नहीं कर सकता ।


जवाबों:


228

यह एक ग्रे क्षेत्र का एक सा है। आपको यह याद रखने की आवश्यकता है कि R हमेशा एक प्रिंट विधि लागू करेगा, और ये प्रिंट विधियाँ कुछ विकल्पों को सुनती हैं। 'स्काइपेन' सहित - वैज्ञानिक प्रदर्शन के लिए एक दंड। से help(options):

'स्काइपेन': पूर्णांक। निश्चित या घातीय संकेतन में संख्यात्मक मान मुद्रित करने का निर्णय लेते समय लगाया जाने वाला जुर्माना। वैज्ञानिक संकेतन के प्रति निश्चित और नकारात्मक के प्रति सकारात्मक मूल्य पूर्वाग्रह: निश्चित संकेतन को तब तक पसंद किया जाएगा, जब तक कि यह 'व्यापक' अंकों से अधिक न हो।

उदाहरण:

R> ran2 <- c(1.810032e+09, 4) 
R> options("scipen"=-100, "digits"=4)
R> ran2
[1] 1.81e+09 4.00e+00
R> options("scipen"=100, "digits"=4)
R> ran2
[1] 1810032000          4

उस ने कहा, मुझे अभी भी यह अजीब लगता है। सबसे सीधा तरीका sprintf()उदाहरण के साथ स्पष्ट चौड़ाई का उपयोग करना है sprintf("%.5f", ran2)


1
धन्यवाद। scipen वह विकल्प प्रतीत होता है जिसकी मुझे तलाश थी। डरावना दंड स्पष्टीकरण ने मुझे शर्मसार कर दिया। लेकिन आपका उदाहरण इसे अच्छी तरह से समझाता है। स्प्रिंटफ, हुह? क्या आप उन समस्याओं का जिक्र कर रहे हैं जिन्हें मैं एक हफ्ते पहले स्प्रिंटफ के साथ कर रहा हूं? :)
मैट बैनर्ट

4
Rstudio में, यदि आप कोई डेटासेट आयात करते हैं और train_sample_10k = प्रारूप (train_sample_10k, वैज्ञानिक = FALSE) करते हैं और पुनः लोड करते हैं, तो यह वैज्ञानिक अधिसूचनाओं को बदल देगा।
मिश्रणदेव

ऐसा करने के बाद मैं चीजों को सामान्य कैसे लौटाऊं?
AIM_BLB

6
@CSA: options("scipen"=0, "digits"=7)(वे डिफ़ॉल्ट मान हैं)
स्कारबी

आपको options("scipen"=100, "digits"=4)उस कोड को स्थानांतरित करना चाहिए जो कोड के शीर्ष पर परिणाम प्राप्त करता है , और एक जो इसके नीचे नहीं है ... उपयुक्त नोटों के साथ। यह किसी को भ्रमित कर सकता है जो त्वरित समाधान की तलाश कर रहा है (और Google परिणाम के रूप में पहला दिखाता है)।
21

152

यह आर में वैज्ञानिक संकेतन को अक्षम करके प्राप्त किया जा सकता है।

options(scipen = 999)

4
इसके अलावा, यह आपके .Rprofile फ़ाइल में डाला जा सकता है ताकि यह डिफ़ॉल्ट रूप से स्वतः-निष्पादित हो जाए।
smci

74

मेरा पसंदीदा उत्तर:

format(1810032000, scientific = FALSE)
# [1] "1810032000"

यह देता है कि आप आर सेटिंग्स में के बारे में क्या करना चाहते हैं।

ध्यान दें कि यह एक संख्या ऑब्जेक्ट के बजाय एक वर्ण स्ट्रिंग देता है


1
हम्म वह अजीब है, यह मेरे लिए काम नहीं करता है। मुझे कोई त्रुटि नहीं मिली, यह अभी भी Sciencific अंकन प्रिंट करता है।
ओवी

यकीन नहीं होता कि क्या गलत हो सकता है। मैंने आर के एक बहुत पुराने (3.1.0) और नए (3.4.3) संस्करण की जाँच की और यह मेरे लिए दोनों में काम करता है। सबसे अधिक संभावना है कि कुछ अन्य सेटिंग कहीं पूर्ववर्ती हो रही हैं या आपको आर में एक संस्करण विशिष्ट या एज-केस बग मिला है। क्या यह संभव है कि आप इसे सांख्यिक वस्तु के बजाय वैज्ञानिक संकेतन में एक स्ट्रिंग खिला रहे हैं? वह इसकी व्याख्या करेगा।
डैनी

10
शायद यह उल्लेखनीय है कि यह संख्या के बजाय एक चरित्र बनाता है।
सेंगेल

3
यदि आपके वेक्टर में संख्याएँ अलग-अलग हो रही हैं, तो सुनिश्चित करें कि justified = "none"उनका उपयोग करना सुनिश्चित करें अन्यथा एक ही लंबाई में उन्हें पैड करने के लिए रिक्त स्थान होंगे।
लॉरेन फिच

1
format(1e6, scientific=FALSE)रिटर्न "1000000"करते समय as.character(1e6)रिटर्न "1e+06", इसलिए दोनों तरीकों में अंतर है।
मिकी

7

options(scipen = 999) अपनी .Rprofile फ़ाइल में रखें ताकि यह डिफ़ॉल्ट रूप से स्वतः-निष्पादित हो जाए । (इसे मैन्युअल रूप से करने पर भरोसा न करें।)

(यह अन्य उत्तरों के लिए कुछ अलग कह रहा है: कैसे?

  1. जब आप कई परियोजनाओं, एक दैनिक या मासिक आधार पर कई भाषाओं के बीच ठगी करते हैं, तो यह चीजों को समझदार रखता है। अपने प्रति-प्रोजेक्ट सेटिंग्स में टाइप करने के लिए याद रखना त्रुटि-प्रवण है और स्केलेबल नहीं है। आपके पास एक वैश्विक ~ /। लाभकारी या प्रति-परियोजना है। या दोनों, पूर्ववर्ती ओवरराइडिंग के साथ।
  2. अपने सभी कॉन्फिगर को प्रोजेक्ट-वाइड या ग्लोबल में रखें। रीफाइरेट ऑटो इसे निष्पादित करता है। यह उदाहरण के लिए उपयोगी है जैसे कि डिफॉल्ट पैकेज लोड, डेटाटेबल कॉन्फ़िगरेशन, एनवायरनमेंट आदि। फिर, वह कॉन्फिगरेशन सेटिंग्स के एक पेज पर चल सकता है, और शून्य मौका है कि आप उन और उनके सिंटैक्स को याद रखेंगे और उन्हें टाइप करेंगे।

आखिर वही जवाब क्यों? stackoverflow.com/a/27318351/680068 Rprofile bit के अलावा, शायद GingerJack के उत्तर को बेहतर ढंग से संपादित करें?
zx8754

@ zx8754: यह बिल्कुल एक ही जवाब नहीं है: महत्वपूर्ण बिंदु इस सामान को अपने .Rprofile में स्थानांतरित करना है। फिर आप इसे कभी नहीं भूल सकते। इसके अलावा, समय आपके द्वारा चला जाता है। लाभ आपके सभी अनुकूलन को जमा करता है।
7

1
अप करने के लिए बेशक, लेकिन क्यू नहीं है "मैं एक्स कैसे करना भूल नहीं सकता" लेकिन "मैं एक्स कैसे कर सकता हूं"।
zx8754

@ zx8754: मैं आर और पायथन / पांडा के बीच प्रतिदिन कई परियोजनाओं पर काम करता हूं। दोनों में अनुकूलन, पैकेज पथ आदि हैं। यह वास्तव में चीजों को एक समान विन्यास फाइल रखने के लिए समझदार रखता है। परियोजनाओं के पार।
smci

1
@ zx8754: जब आप कई भाषाओं में कई परियोजनाओं पर काम कर रहे होते हैं, तो सवाल यह है कि "मैं एक्स कैसे कर सकता हूं" के साथ "मैं कैसे एक्स को भूल नहीं सकता", एक स्केलेबल, सुसंगत, स्वचालित तरीके से। मैंने अभी और स्पष्टीकरण जोड़ा है। जिसके लिए ड्राइव-डाउन डाउनवॉटर है।
मुस्कान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.