2010-10-20 18 views
20

की 1e-5 के बजाय मैं read.table का उपयोग किया है कि इस तरह के 0.00001संख्या प्रारूप, लेखन 0.00001

के रूप में संख्या शामिल एक फ़ाइल को पढ़ने के लिए जब मैं उन्हें write.table के साथ वापस लिखना उन संख्याओं 1e-5

के रूप में प्रकट मैं पुराना प्रारूप कैसे रख सकता हूं?

उत्तर

15

आप स्वरूपण के साथ तार करने के लिए अपने नंबर परिवर्तित करने के रूप में आप की आवश्यकता होती है, तो write.table करने के लिए कॉल में तर्क quote = FALSE का उपयोग करके ऐसा कर सकते हैं।

dfr <- data.frame(x = 10^(0:15)) 
dfr$y <- format(dfr$x, scientific = FALSE) 
write.table(dfr, file = "test.txt", quote = FALSE) 

ध्यान दें कि आप अपनी फ़ाइल में संख्या का स्वरूप बदलने की जरूरत नहीं होनी चाहिए। वैज्ञानिक सॉफ्टवेयर के हर टुकड़े और प्रत्येक स्प्रेडशीट संख्याओं के लिए वैज्ञानिक नोटेशन को समझता है, और इसमें संख्या स्वरूपण विकल्प भी हैं ताकि आप उन्हें देख सकें कि आप कैसे चुनते हैं।

+1

के साथ स्वरूपित पाठ फ़ाइल में मुद्रित मैं शायद कि 'का उपयोग कर बोली = FALSE' बंद हो जाएगा उल्लेख करना चाहिए ** सब ** चरित्र और कारक कॉलम उद्धृत किया जा रहा है। –

+2

मैं एक पोस्टग्रेज़ डेटाबेस में सीएसवी फाइलों को पास कर रहा हूं। डिफ़ॉल्ट एसक्यूएल 1e + 5 को पूर्णांक के रूप में पहचाना नहीं जाएगा ... – Rodrigo

+0

उदाहरण के लिए सर्कोस (http://circos.ca/) को गैर-वैज्ञानिक स्वरूपण की आवश्यकता होती है। इसलिए, मुझे लगता है कि पर्ल वैज्ञानिक संख्याओं को पूर्णांक के रूप में नहीं मानता है। –

5

यदि इनपुट वैज्ञानिक नोटेशन और स्पष्ट नोटेशन संख्या का मिश्रण है, तो आप संख्याओं को पढ़ने के लिए अपना स्वयं का पार्सर लिखेंगे और ट्रैक बनाएंगे कि कौन से प्रारूप प्रारूप में थे। वास्तव में, आप उन संख्याओं के चारों ओर झूठ बोलने वाले स्ट्रिंग का प्रतिनिधित्व करना चाहेंगे ताकि आप इनपुट में क्या बिल्कुल लिख सकें।

हालांकि, अगर आप लगातार स्पष्ट नोटेशन के साथ लिखने योग्य() लिखना चाहते हैं, तो कोशिश करें।

 
    write.table(format(_your_table_here_, scientific=FALSE), ...) 
34

मैं write.table पर कॉल करने से पहले scipen विकल्प बदल दूंगा। ध्यान दें कि यह भी बदलेगा कि कंसोल पर प्रिंट करते समय संख्याएं कैसे प्रदर्शित की जाती हैं।

options(scipen=10) 
write.table(foo, "foo.txt") 
options(scipen=0) # restore the default 
+0

अगर मुझे इसकी आवश्यकता सिर्फ एक पंक्ति में है, और मेरे पास कई हैं? – skan

+5

@ user425895: फिर आपको अपने प्रश्न में यह निर्दिष्ट करने की आवश्यकता है। –

+1

आधुनिक संस्करण: 'withr :: with_options (c (scipen = 10), write.table (foo, "foo.txt") '। –

1
सभी पंक्तियों पर अधिकतम नियंत्रण पाश के लिए

और उन्हें sprintf

# Find number of rows in data.frame test 
nrows <- dim(test)[1] 

# init a new vector 
mylines <- vector("character",dim(test)[1]) 

# loop over all rows in dataframe 
for(i in 1:nrows){ 
    # Print out exactly the format you want 
    mylines[i] <- sprintf("Line %d: %.2f\t%.2f",1,test[i,"x"],test[i,"y") 
} 

# write lines to file 
writeLines(mylines,"out.txt") 
संबंधित मुद्दे