आर में एक फ़ाइल के लिए पाठ की पंक्तियाँ लिखें


341

R स्क्रिप्टिंग भाषा में, मैं कैसे पाठ की पंक्तियाँ लिखता हूँ, उदाहरण के लिए निम्न दो पंक्तियाँ

Hello
World

"output.txt" नामक फ़ाइल में?

जवाबों:


420
fileConn<-file("output.txt")
writeLines(c("Hello","World"), fileConn)
close(fileConn)

7
निशान - क्या होगा अगर मेरे पास कई धागे हैं जिनमें से मैं एक ही फ़ाइल में लाइनें जोड़ना चाहूंगा? (मुद्दा यह है कि आपके पास फ़ाइल से अधिक कनेक्शन नहीं हो सकता है, अगर मुझसे कोई गलती नहीं है) धन्यवाद।
ताल गैली

8
@ ताल, यह एक उत्कृष्ट प्रश्न है, आपको इसे एक नए, अलग प्रश्न के रूप में पोस्ट करना चाहिए ताकि इसे कुछ ध्यान मिल सके। मेरे अलावा यहाँ और भी बहुत से जानकार आर प्रोग्रामर हैं!
मार्क

8
ध्यान दें कि इसके लिए फ़ाइल "output.txt" पहले से मौजूद है। यदि ऐसा नहीं होता है, तो इसे पहले बनाया जाना चाहिए, जैसे 'file.create ("output.txt")' का उपयोग करना।
१२

20
@ जहँ सच कहूँ तो यकीन नहीं होता। RStudio 0.98 और R संस्करण 3.1.0 का उपयोग करते हुए फ़ाइल स्वचालित रूप से बनाई गई है यदि यह मौजूद नहीं है
JHowIX

4
का विकल्प writeLines()लगभग दस गुना तेज है और फिर का संयोजन sink()औरcat()
rafa.pereira

151

वास्तव में आप इसके साथ कर सकते हैं sink():

sink("outfile.txt")
cat("hello")
cat("\n")
cat("world")
sink()

इसलिए करते हैं:

file.show("outfile.txt")
# hello
# world

Databricks पर सिंक () काम नहीं करता है सावधान रहें। आप इन सभी को एक फंक्शन के अंदर रख सकते हैं और इस फंक्शन को
कैप्चर की

109

मैं cat()इस उदाहरण में कमांड का उपयोग करूंगा :

> cat("Hello",file="outfile.txt",sep="\n")
> cat("World",file="outfile.txt",append=TRUE)

तब आप R के साथ से परिणाम देख सकते हैं

> file.show("outfile.txt")
hello
world

7
यह एक फाइल को लगातार खोलता और बंद करता है। यह दृष्टिकोण अक्षम हो सकता है।
22

56

एक साधारण के बारे में क्या है writeLines()?

txt <- "Hallo\nWorld"
writeLines(txt, "outfile.txt")

या

txt <- c("Hallo", "World")
writeLines(txt, "outfile.txt")

1
यह दिखाने के लिए अच्छा है कि इनपुट के लिए लाइनों का वेक्टर नहीं होना चाहिए
टिम

1
@tim वास्तव "Hallo\nWorld"में चरित्र प्रकार की एक लंबाई एक वेक्टर है। बस कोशिश करेंtxt <- "Hallo\nWorld"; is.character(txt) && length(txt) == 1 && is.vector(txt)
जीरो 323

यह मेरे लिए ही काम करता है writeLines(txt, con="outfile.txt")
पलक

नहीं, जब तक आप दूसरे तर्क के रूप में मान्य फ़ाइल नाम देते हैं, तब तक नामकरण के बिना काम करना चाहिए।
पीटरमेर्स्नर

@petermeissner> coefficients<-summary(model) > writeLines(coefficients, "coefficients") Error in writeLines(coefficients, "coefficients") : invalid 'text' argument
alhelal

17

आप एक ही बयान में ऐसा कर सकते हैं

cat("hello","world",file="output.txt",sep="\n",append=TRUE)

13

मैं सुझाव देता हूँ:

writeLines(c("Hello","World"), "output.txt")

यह वर्तमान स्वीकृत उत्तर की तुलना में छोटा और अधिक प्रत्यक्ष है। यह करना आवश्यक नहीं है:

fileConn<-file("output.txt")
# writeLines command using fileConn connection
close(fileConn)

क्योंकि प्रलेखन के लिए writeLines()कहते हैं:

यदि conएक वर्ण स्ट्रिंग है, तो फ़ंक्शन कॉल fileको एक फ़ाइल कनेक्शन प्राप्त करने के लिए कहता है जो फ़ंक्शन कॉल की अवधि के लिए खोला जाता है।

# default settings for writeLines(): sep = "\n", useBytes = FALSE
# so: sep = "" would join all together e.g.


3

आर में एक फ़ाइल के लिए पाठ की पंक्तियों को लिखने के छोटे तरीके बिल्ली या राइटलाइन के साथ महसूस किए जा सकते हैं जैसा कि पहले से ही कई उत्तरों में दिखाया गया है। कुछ सबसे छोटी संभावनाएँ हो सकती हैं:

cat("Hello\nWorld", file="output.txt")
writeLines("Hello\nWorld", "output.txt")

यदि आपको "\ n" पसंद नहीं है तो आप निम्न शैली का भी उपयोग कर सकते हैं:

cat("Hello
World", file="output.txt")

writeLines("Hello
World", "output.txt")

जबकि राइटलाइन फ़ाइल के अंत में एक नई पंक्ति जोड़ता है जो बिल्ली के लिए मामला नहीं है । इस व्यवहार को इसके द्वारा समायोजित किया जा सकता है:

writeLines("Hello\nWorld", "output.txt", sep="") #No newline at end of file
cat("Hello\nWorld\n", file="output.txt") #Newline at end of file
cat("Hello\nWorld", file="output.txt", sep="\n") #Newline at end of file

लेकिन मुख्य अंतर यह है कि बिल्ली आर वस्तुओं का उपयोग करती है और तर्क के रूप में एक चरित्र वेक्टर लिखती है । इसलिए बाहर लिखना जैसे कि संख्या 1:10 को राइटलाइन के लिए डालना पड़ता है जबकि इसे बिल्ली में इस्तेमाल किया जा सकता है:

cat(1:10)
writeLines(as.character(1:10))

2

संभावनाओं को पूरा करने writeLines()के लिए sink(), यदि आप चाहें, के साथ उपयोग कर सकते हैं:

> sink("tempsink", type="output")
> writeLines("Hello\nWorld")
> sink()
> file.show("tempsink", delete.file=TRUE)
Hello
World

मेरे लिए, यह हमेशा उपयोग करने के लिए सबसे अधिक सहज लगता है print(), लेकिन यदि आप ऐसा करते हैं कि आउटपुट वह नहीं होगा जो आप चाहते हैं:

...
> print("Hello\nWorld")
...
[1] "Hello\nWorld"

2

सबसे अच्छे उत्तर के आधार पर :

file <- file("test.txt")
writeLines(yourObject, file)
close(file)

ध्यान दें कि yourObjectस्ट्रिंग प्रारूप में होने की आवश्यकता है; as.character()यदि आप की जरूरत है कन्वर्ट करने के लिए उपयोग करें।

लेकिन यह प्रत्येक सेव प्रयास के लिए बहुत अधिक टाइपिंग है । आइए RStudio में एक स्निपेट बनाएं।

वैश्विक विकल्पों में >> कोड >> स्निपेट, इसे टाइप करें:

snippet wfile
    file <- file(${1:filename})
    writeLines(${2:yourObject}, file)
    close(file)

फिर, कोडिंग के दौरान, टाइप करें wfileऔर दबाएंTab


file <- file(...)लाइन मेरे लिए संदिग्ध लग रहा है। क्या यह दोनों fileएक कार्य के रूप में और fileएक नया अर्थ निर्दिष्ट नहीं कर रहा है? क्या file()यह कोड कोड चलने के बाद भी काम करता है ? अभी खुद को परखने के लिए R इंस्टॉलेशन तक पहुंच नहीं है ...
Palec

अगर आपने आरक्षित शब्दों में कुछ समस्या है तो यह मेरे सेटअप @Palec पर काम कर सकता है। आप फ़ाइल को बदल सकते हैं
लुइस मार्टिंस

1

बदसूरत सिस्टम विकल्प

ptf <- function (txtToPrint,outFile){system(paste(paste(paste("echo '",cat(txtToPrint),sep = "",collapse = NULL),"'>",sep = "",collapse = NULL),outFile))}
#Prints txtToPrint to outFile in cwd. #!/bin/bash echo txtToPrint > outFile

1

एक साधारण के बारे में क्या write.table()?

text = c("Hello", "World")
write.table(text, file = "output.txt", col.names = F, row.names = F, quote = F)

पैरामीटर col.names = FALSEऔर row.names = FALSEtxt में पंक्ति और स्तंभ नामों को बाहर करना सुनिश्चित करें, और पैरामीटर quote = FALSEtxt में प्रत्येक पंक्ति के आरंभ और अंत में उन उद्धरण चिह्नों को बाहर करता है। डेटा को वापस पढ़ने के लिए, आप उपयोग कर सकते हैं text = readLines("output.txt")


0

आर के नए संस्करणों में, writeLinesआपके पाठ में रिटर्न और रिक्त स्थान को संरक्षित करेगा, इसलिए आपको \nलाइनों के अंत में शामिल करने की आवश्यकता नहीं है और आप एक फ़ाइल में पाठ का एक बड़ा हिस्सा लिख ​​सकते हैं। यह उदाहरण के साथ काम करेगा,

txt <- "Hello
World"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)

लेकिन आप इस संरचना का उपयोग केवल संरचना (लाइनब्रेक या इंडेंट) के साथ पाठ को शामिल करने के लिए भी कर सकते हैं

txt <- "Hello
   world
 I can 
   indent text!"
fileConn<-file("output.txt")
writeLines(txt, fileConn)
close(fileConn)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.